1.はじめに
初投稿です。
会社の後輩がSwiftUIのチュートリアルにあったこれで躓いた時、きちんと答えることができなかったので、復習を兼ねて記事にしました。
この記事では
- トレイリングクロージャー
- 複数のトレイリングクロージャー
について書いていきます。
2.トレイリングクロージャー
そもそもトレイリングクロージャーって何?
↓↓↓これです↓↓↓
/// クロージャー引数をもつ関数の宣言
func doHoge(fuga: () -> ()) {
fuga()
}
/// 普通に引数にクロージャーを渡して、関数を呼び出す
doHoge(fuga: {
print("fuga")
})
/// これがトレイリングクロージャー
doHoge {
print("fuga")
}
/// クロージャー引数をもつ関数の宣言
func doHoge(fuga: Int, piyo: () -> ()) {
print("\(fuga)")
piyo()
}
/// 普通に引数にクロージャーを渡して、関数を呼び出す
doHoge(fuga: 1,
piyo: {
print("piyo")
})
/// これもトレイリングクロージャー
doHoge(fuga: 1) {
print("piyo")
}
公式サイトではこれだ!って書き方がなかったので、自分なりに解釈をした言葉で言うと
トレイリングクロージャーとは
「クロージャーの引数が末尾の時に使えるシンタックスシュガー」
もう少し細かく言うと
「クロージャーの引数が末尾のメソッドを呼び出す際に、引数ラベルや括弧を省略できる記法」
と認識しています
※「引数の最後がクロージャーの時に使える記法」という認識だと、後述で「?」となってしまいます
3.複数のトレイリングクロージャー
本題。
複数のトレイリングクロージャーって何?
↓↓↓これです↓↓↓
func doHoge(fuga: () -> (), piyo: () -> ()) {
fuga()
piyo()
}
クロージャーの引数が複数ありますね。
これのトレイリングクロージャーが↓です。
doHoge {
print("fuga")
} piyo: {
print("piyo")
}
これは最近見たことある人いるんじゃないでしょうか。
そう、最近林檎が勝手に書き換えやがったSwiftUIのチュートリアルです。
ここで後輩がやられました。
↓件のSwiftUIのチュートリアル。「Building Lists and Navigation 第6節のステップ6」で登場します。
https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation
ちなみに、英語では「Multiple Trailing Closures」と呼ばれているみたいです。
これでggると色々な記事が出てきますね。日本語だとわかりやすい記事が出てこなかったです……
4.いつの間に実装されてたの?
ここ(2020-09-16)によると、Swift5.3の時に追加された記法らしいです。
実際、Swift公式のClosuresでも記載はあります。(ちょっと見落としがちではありますが)
5.どのXcodeで使えるの?
余談ではありますが、Xcodeのバージョンによって使用できるSwiftのバージョンは異なります。
Download SwiftではSwift5.3のPlatformがXcode12とあるので、12以降なら使えるみたいですね(筆者は11以前で試したことはないです)
6.まとめ
トレイリングクロージャーには複数の書き方がある。
- doHoge {}
- doHoge(fuga: x) {}
- doHoge {} piyo: {}
最初誤植かと思ったよ……精進せねば。
他にも、間違いの指摘だけでなく、SwiftやiOS開発の小ネタ等あればコメントよろしくお願いします。