定義するクロージャの型が推論できるケースでは、型を省略することができます。
var closure: (String) -> Int
// 型を明記
closure = { (string: String) -> Int in
return string.count
}
closure("abc") // 3
// 型を省略
closure = { string in
return string.count
}
closure("def") // 3
一番最初にclosureの型が定義されるので、Swiftが勝手に型を推測してくれます。
簡略引数名
さらに引数名の定義を省略し、代わりに簡略引数名を利用できます。
簡略引数名は、ドルマークに引数のインデックスをつけた$0などがそれです。
let isEqual: (Int, Int) -> Bool = {
return $0 == $1
}
isEqual(1, 1) // true
簡略引数名を使用したクロージャは、型推論ができない場合はエラーになります。
let notIsEqual = {
return $0 == $1
}
isEqual(1, 1)
Ambiguous use of operator '=='
まとめ
無闇矢鱈に使用すると可読性は低くなりますが、シンプルな処理であれば積極的に利用した方が良さそうです。
参考
[増補改訂第3版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plusシリーズ)