iOS 15 Programming Fundamentals with SwiftのI-1とI-2を読んだので不明点をまとめる

I. Languageの
1. The Architecture of Swift
2. Functions
で不明点をまとめる


・Signatureとfullname
Signatureは型を示したもの
(Int, Int) -> Int
voidなら以下
() -> Void or () -> ()

関数のfull name
func echo(string s:String, times n:Int) -> String

echo(string:times:)
と書く
func say(_ s:String, times:Int){}
ならfull nameは以下
say(_:times:)

 

・Void型の省略

//以下は全部一緒
func say1(_ s:String) -> Void {print(s)}
func say2(_ s:String) -> () {print(s)}
func say3(_ s:String) {print(s)}

 

・anonymous

let function1 = {() -> () in print(test2) }
let function2 = {(finish:Bool) -> () in print(finish) }

 

・クロージャーの省略
https://www.isoroot.jp/blog/3000/

//返り値を省略
let function3 = {() in print(test2)}
let function4 = {(finish:Bool)  in print(finish) }
function3()
function4(true)

//引数を省略
let function5 = {print(test2)}
function5()

//型を省略。
//これやると何でも値通っちゃうんだけどな・・・・
let function6 = {(finish) in print(finish) }
function6(true)
function6("aaa")

//かっこをとる
let function7 = {finish  in print(finish) }
function7(false)
function7("bbb")

//$0を使う
let function8 = {print($0) }
function8(true)
function8("ccc")

・completionを省略していく

UIView.animate(withDuration: 0.4, animations: {},
               completion: {(finish:Bool) in print("aaa")})
//引数を使わない場合
UIView.animate(withDuration: 0.4, animations: {},
               completion: {_ in print("aaa")})
//末尾の引数を外に出す
UIView.animate(withDuration: 0.4, animations: {})
                {_ in print("aaa")}

・mapでやってみた

let arr = [2, 4, 6, 8]
let arr2 = arr.map({(i:Int) -> Int in return i*2})
print(arr)
print(arr2)
let arr3 = arr.map({(i:Int) -> Int in i*3})
print(arr3)
let arr4 = arr.map({i -> Int in i*3})
print(arr4)
let arr5 = arr.map({$0*3})
print(arr5)

 

・functionを返却

func function11() -> () -> Void {
    func f() {
        print("function11")
    }
    return f
}
function11()();


func function12() -> () -> Void {
    return {
        print("function12")
    }
}
function12()();

 

・参照渡し

func aaa(name s: inout String) {
    s = s + "!"
}

var masterka = "masterka"
aaa(name: &masterka)

 

・@escaping
https://qiita.com/mishimay/items/1232dbfe8208e77ed10e

func funcPasser(f:@escaping () -> ()) -> () -> () {
    return f
}

funcPasser {
    print("funcPasser")
}

 

・capture

//captureしないと数字があがる
var x = 0
let f  :()->() = {
    print(x)
}
f() //0
x=1
f()  //1


//capture
var xx = 0
let ff  :()->() = { [xx] in
    print(xx)
}
ff() //0
xx=1
ff() //0

関連記事:

Pocket