今回は、Swift の @autoclosure
アノテーションについて書いていこうと思います。
@autoclosure とは?
@autoclosure
アノテーションをつけてクロージャーを実装すると、呼び出し側で引数として渡した値をクロージャーとして扱うことのできる機能です。@autoclosure
を使わなかった場合と使った場合のサンプルが下記になります。
@autoclosure を使わない場合
func hello(name: () -> String) { print("Hello \(name())") } hello { () -> String in // Hello Yamato return "Yamato" }
@autoclosure を使った場合
func hello(name: @autoclosure () -> String) { print("Hello \(name())") } hello(name: "Yamato") // Hello Yamato
いつ使うのか?
正直僕はまだ、ここぞといタイミングに出くわしたことがないため、下記のようにクロージャが複数ある場合に、シンプルな値を受け取る時ぐらいしか恩恵を受けるポイントが思いつきませんでした🤔 (ここで使うと便利だよ!という所があれば教えてください🙇♂️)
func hello(firstName: @autoclosure () -> String, lastName: @autoclosure () -> String) { print("Hello \(firstName()+lastName())") } hello(firstName: "Yamato", lastName: "Otaka")
参考
https://www.swiftbysundell.com/articles/using-autoclosure-when-designing-swift-apis/