Swiftを始めよう! - Closure
関数をもっと簡単に書けるようにしたのが Closureです。知っているば簡単ですが、知らないと何がなんだかわからないものでもあります。形を覚えると理解が早いと思います。
関数の引数にClosure
var numbers = [20, 19, 7, 12]
変数numberがあります。関数mapを使って配列の全要素に同じ処理を適用してみましょう。基本の形は以下。引数と返り値の型を指定、返り値で値を返します(他の式で使えるようになります)。
numbers.map({ (number: Int) -> Int in
let result = 3 * number
return result
})
なので、これを実行しても何も起こりません。
変数に代入する形で実行します(以下は返り値の型の指定とreturnを省略した形)。
let mappedNumbers = numbers.map({ number in 3 * number })
print(mappedNumbers)
変数に入れることで出力できるようになります。
mapを使うことで、配列numbersの各値に"3"を掛けて結果を出しています。
さらにもっと簡単にできます。配列の値を"$0","$1"に例えて実行できます。
以下は並び替えの関数sortedを使っています。値を大きいものから小さいものに並び替えします。
let sortedNumbers = numbers.sorted { $0 > $1 }
print(sortedNumbers)
"[20, 19, 12, 7]" と並び替えて出力されます。
Closureの基本形
関数名をつけずにひとまとまりの処理を実行することができます。
{(引数) -> (戻り値の型) in
// 処理
return 戻り値
}
これをもっと簡単に初略して書くこともできます。
return の省略
let test = { () -> () in print("テスト") }
test()
引数、戻り値の省略
let test2 = { print("テスト") }
test2()
実行すると両方ともに"テスト"と出力されます。