iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Swift の @autoclosure

今回は、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/

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com