クロージャー式を関数の最後尾の引数として渡す時、トレーリングクロージャー(Trailing Closures)という記法を用いることができます。
sample1(トレーリングクロージャー)
func someFunc(clo:()->Void){ //関数定義 } //通常の書き方↓ someFunc(clo:{//クロージャーの本体定義}) //トレーリングクロージャー↓ someFunc(){//トレーリングクロージャーの本体定義}
上記sample1のようにトレーリングクロージャーは関数実行時の関数名の後ろの丸かっこの後ろに記述します。丸かっこの後ろに記述していますが、それでも関数someFuncの引数であることは変わりません。
トレーリングクロージャーを使用することで関数someFuncの実行時に引数名(clo)を書かなくてすみます。
前回のsample8(再掲)
let names = ["Ochris", "Yalex", "Ewa", "Varry", "Daniella"] var reversedNames = names.sorted(by: { $0 > $1 } ) print(reversedNames) //["Yalex", "Varry", "Ochris", "Ewa", "Daniella"]
上記コードは以下のようにトレーリングクロージャーを使用して記述できます。
sample2
let names = ["Ochris", "Yalex", "Ewa", "Varry", "Daniella"] var reversedNames = names.sorted() { $0 > $1 } print(reversedNames) //["Ewa", "Daniella", "Chris", "Barry", "Alex"]
関数やメソッドの唯一の引数としてトレーリングクロージャーを渡す時、関数名・メソッド名の後ろの丸かっこは省略できます。sample2のsortedメソッドの丸かっこを省略するとsample3のようになります。
sample3
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"] var reversedNames = names.sorted{ $0 > $1 } //←メソッド実行時の丸かっこを省略 print(reversedNames) //["Ewa", "Daniella", "Chris", "Barry", "Alex"]
参考
https://docs.swift.org/swift-book/LanguageGuide/Closures.html