2019/12/13 Swift クロージャー パート2(Trailing Closures)

クロージャー式を関数の最後尾の引数として渡す時、トレーリングクロージャー(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

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です