見出し画像

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)

変数に入れることで出力できるようになります。

"[60, 57, 21, 36]"

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()

実行すると両方ともに"テスト"と出力されます。

この記事が気に入ったらサポートをしてみませんか?