1
1

More than 1 year has passed since last update.

【Swift】複数のトレイリングクロージャー

Last updated at Posted at 2022-07-13

1.はじめに

初投稿です。
会社の後輩がSwiftUIのチュートリアルにあったこれで躓いた時、きちんと答えることができなかったので、復習を兼ねて記事にしました。

この記事では

  • トレイリングクロージャー
  • 複数のトレイリングクロージャー

について書いていきます。

2.トレイリングクロージャー

そもそもトレイリングクロージャーって何?

↓↓↓これです↓↓↓

引数が1つだけの場合
/// クロージャー引数をもつ関数の宣言
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開発の小ネタ等あればコメントよろしくお願いします。

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