LoginSignup
1
1

More than 3 years have passed since last update.

クロージャと簡略引数名

Posted at

定義するクロージャの型が推論できるケースでは、型を省略することができます。

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シリーズ) 

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1