Swift入門:クロージャ ( 引数 , 省略 , トレイリング)

 

ネットワークのコールバック(success, failure)や、

非同期処理GCDなどでよく使います。

少し複雑ですが、よく使い慣れると便利です。

 


クロージャを関数の引数にする


 


クロージャの引数なしの例

func method(closure: () -> Void) {
closure()
}

method({
println(“do something”)
})



  • 4行目のmethod を実行。


  • 1行目のmethodの引数にクロージャが渡される。


  • 2行目のclousure実行。


  • 6行目のprintlnで、do somethingを出力。


クロージャの引数ありの例

func method(closure: (String) -> Void) {
closure(“do something”)
}

method({ (str) -> Void in
println(str)
})


クロージャに引数があるパターンです。


少し複雑ですが、順を追って見ていきましょう。



  • 4行目のmethod を実行。


  • 1行目のmethodの引数に引数ありのクロージャが渡される。


  • 2行目のclousureが実行され、引数の”do something” を渡す。


  • 6行目のprintlnで、引数str の”do something”を出力。


トレイリングクロージャ ( Trailing Closure )

func addStr(a: String, b: String, closure: (String, String) -> String) -> String {
return closure(a, b)
}

let str = addStr(“Hello”, b:“World”) {
“($0) ($1)”
}
println(str)


特徴としては、先ほどのものとは違って、


4行目のadrStrにくっついて実行されるクロージャ{}があるという点です。


また、トレイリングクロージャの引数を$0, $1のように省略してやることもできます。



  • 4行目のaddStr を実行。


  • 1行目のaddStrの引数に a, b とクロージャが渡される。


  • 2行目のclosureが実行され、closureにa, bを渡す。


  • addStrが”Hello World”の文字列が返す。


  • strに文字列が代入され、最終行で”Hello World”が出力される。


comments powered by Disqus