post Image
【Swift】クロージャ(基本編)

実行環境

  • Swift4
  • Xcode9.2

クロージャとは

自分を囲むスコープにある変数を参照する関数のこと。
Swiftは第一級関数をもつ言語で、関数そのものを型に指定できたり、関数をインスタンス化できたりする。
関数に名前がない無名関数としても定義することができる。

使いどころ

変数や引数に関数の中身を直接代入できるため、グローバル変数の宣言をなるべく減らしたい場合や関数の実行結果を次の処理で続けて使用する関数を作成したい場合に使用する。

定義

 { (引数名:引数の型) -> 戻り値の型 in
    処理
 }

基本的な使い方

引数と戻り値のないクロージャ

// 引数と戻り値のないクロージャ
let closure = { () -> Void in print("クロージャテスト") }
// クロージャ実行
closure()


// 戻り値がVoidであれば、以下のようにも書ける
let closure = { () -> () in print("クロージャテスト") }
closure()


// クロージャーは引数と戻り値の型は推論が効くため、以下のような省略が可能
let closure = { print("クロージャテスト") }
closure()

引数あり、戻り値なしのクロージャ

// 引数あり、戻り値なしのクロージャ
let closure = { (num1: Int, num2: Int) -> Void in print(num1 + num2) }
closure(1, 2)

引数なし、戻り値ありのクロージャ

// 引数なし、戻り値ありのクロージャ
let closure = { () -> Int in return 100 }
closure()

引数あり、戻り値ありのクロージャ

// 引数あり、戻り値ありのクロージャ
let closure = { (num1: Int, num2: Int) -> Int in return num1 + num2 }
closure(1, 2)

シンタックスシュガー

処理が単文の場合はreturnの省略が可

// 省略なしの場合
// let closure = { (num1: Int, num2: Int) -> Int in return num1 + num2 }
let closure = { (num1: Int, num2: Int) -> Int in num1 + num2 }
// クロージャ実行
print(closure(5, 10)) // 結果: 15

処理が単文の場合は戻り値の型の省略が可

// 省略なしの場合
// let closure = { (num1: Int, num2: Int) -> Int in return num1 + num2 }
let closure = { (num1: Int, num2: Int) in num1 + num2 }
// クロージャ実行
print(closure(5, 10)) // 結果: 15

型が分かっている場合は省略が可

// 変数宣言
let closure: (Int, Int) -> Int
// 変数にクロージャを代入
closure = { (num1, num2) in num1 + num2 }
// クロージャ実行
print(closure(5, 10)) // 結果: 15

引数名にこだわりがなければ引数名の省略が可

// 変数宣言
let closure: (Int, Int) -> Int
// 変数にクロージャを代入
// クロージャは自動的に名前が付けられる
// 第1引数は$0、第2引数は$1となる
// これを使用すると、引数の定義は不要であり、またinも不要となる
closure = { $0 + $1 }
// クロージャ実行
print(closure(5, 10)) // 結果: 15

『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。