0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Swift】クロージャーの使い方

0
Posted at

クロージャーとは

クロージャーは、関数を変数のように扱うことができる機能であり、関数を引数として渡すことや、関数から戻り値として返すことができます。

例文

クロージャーの基本的な構文

クロージャーの基本的な構文は以下のようになります。

{ (引数) -> 戻り値の型 in
  // 処理内容
}

例えば、以下は、引数に整数を取り、2倍した値を返すクロージャーの例です。

let doubler = { (number: Int) -> Int in
  return number * 2
}

クロージャーの使用例

クロージャーを使用する例として、以下は、配列に対してクロージャーを使い、要素を2倍した配列を作成する例です。

let numbers = [1, 2, 3, 4, 5]
let doubledNumbers = numbers.map({ (number: Int) -> Int in
  return number * 2
})
print(doubledNumbers) // [2, 4, 6, 8, 10]

また、クロージャーを引数として渡す例として、以下は、引数としてクロージャーを受け取り、そのクロージャーを2回実行する関数を定義する例です。

func runTwice(_ closure: () -> ()) {
  closure()
  closure()
}

runTwice {
  print("Hello")
}
// Hello
// Hello

キャプチャーとエスケープ

クロージャーは、変数を「キャプチャー」することができます。キャプチャーとは、クロージャーが作成された時点で存在していた変数を、そのクロージャー内で利用できるようにすることです。また、クロージャーを関数の引数として渡す場合、そのクロージャーが関数の実行が終了した後も実行される可能性がある場合、「エスケープ」する必要があります。

var x = 10
let closure = {
  print(x)
}

func foo(closure: () -> ()) {
  closure()
}
foo(closure: closure) // 10

この例では、クロージャーが変数xをキャプチャーしており、関数fooでエスケープしています。そのため、関数fooの実行が終了した後も、クロージャーが実行される可能性があることに注意してください。

最後に

iOSアプリ開発をしています。
主にSwiftですが、最近は熱が入ってきてFlutterも🦾
色々やってます。もし良かったら見てってください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?