Swift入門:クロージャ ( closure , 無名関数 )

 

クロージャ ( closure,  無名関数 ) の書き方を解説していきます。

クロージャは、Objective-Cでいうブロックにあたります。

癖がある書き方をしますが、覚えてしまえば大変便利です!

 


クロージャってなに?


 


他の言語ではラムダや無名関数と言われたします。


簡単に言い換えれば、名前を持たない関数です。


 


クロージャの基本


 


{(引数:型) -> (戻り値の型) in
    return 戻り値
}


 


引数がないクロージャの用例


 


まずは引数がないクロージャから見てみましょう

// type1
let closure1 = {
println(“do closure process”)
}
closure1()

// type2
let closure2 = { () in
println(“do closure process”)
}
closure2()

// type3
let closure3 = { () -> () in
println(“do closure process”)
}
closure3()

// type4
let closure4 = { () -> Void in
println(“do closure process”)
}
closure4()


 


最もシンプルなクロージャの用例です。


type1〜4を書いていますが、どれも同じ処理になります。



  • type1: 最もシンプルなクロージャ


  • type2: () in の違い


  • type3: () -> () in の違い


  • type4: () -> Void の違い


-> () や -> Void で、明示的に戻り値のないクロージャとして定義することができます。


type1が一番シンプルなので、ぼくは好んでtype1の書き方をします。


 


引数があるクロージャの用例


 

// type5
let closure5 = { (word:String) in
println(word)
}
closure5(“do closure process”)


 


引数として、文字列をクロージャの引数wordに渡しています。


 


引数と戻り値があるクロージャ


 

// type6
let closure6 = { (word:String) -> String in
return word
}
let value = closure6(“do closure process”)
println(value)


 


-> String で文字列の型を定義しています。


return wordで引数に与えられた文字列をそのまま返しています。


 

comments powered by Disqus