LoginSignup
2
2

More than 3 years have passed since last update.

Swift Closureのキホン

Posted at

この記事は何?

Swiftプログラミングを理解する上で欠かせない Closure(クロージャ) について、キホンから勉強できます。

実行環境

Xcode10.2.1
Swift5.x

ハンズオン

実際にコードを書いて、確認します。

カンタンに言うと

クロージャを使うと、関数をオブジェクトとして扱えるようになります。
関数を 何かしらの目的を果たしてくれる機能 として捉えてみましょう。
そんな表現で、クロージャを使うと...

  • 機能をオブジェクトに代入する
  • 機能をパラメータとして関数に渡す

みたいなことができます。

普通の関数

こんな関数 sum(numbers:) があったとします。
この関数は、整数の配列になっている各要素の合計値を計算してくれます。

func sum(numbers: [Int]) -> Int {
    var total = 0
    for number in numbers { total += number }
    return total
}

パラメータとして [Int] を受けて、Int を返していることに注目しておきましょう。
これは、この関数の型 [Int]->Int です。

実行すると...

sum(numbers: [1, 2, 3])    // 6

1 + 2 + 3 = 6 ですね。

クロージャ

同じ機能をクロージャで表現します。

let sumNumbers = { (numbers: [Int]) -> Int in
    var total = 0
    for number in numbers { total += number }
    return total
}

クロージャを定数オブジェクト sumNumbers に代入してる感じです。
{ 関数の型 in 実装 } の部分がクロージャです。
関数の型だけに注目すると...
(numbers: [Int]) -> Int となっています。
最初の関数 sum(numbers:) と同じ型になっていますね。
機能をオブジェクトに代入する ことができました。
この定数オブジェクトの機能を実行するには...

sumNumbers([1, 2, 3])    // 6

と記述します。
結果は 1 + 2 + 3 = 6 ですね。

クロージャのパターン

この記事で扱ったクロージャは...
引数あり・返り値あり な機能でした。と言うことは、他にも...

  • 引数なし・返り値ありなクロージャ
  • 引数あり・返り値なしなクロージャ
  • 引数なし・返り値なしなクロージャ

があるんでしょうね。

2
2
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
2
2