ぶぴログ

開発でのあれこれをアレしていくだけのただのメモ。

Swift2 : クロージャの省略形について

  1. クロージャの省略形
    1. 型の省略が可能なパターン
    2. return文の省略が可能なパターン
    3. 局所引数名の省略が可能なパターン
  2. 引数としてのクロージャ
    1. クロージャ1個のみを引数とする場合の( )が省略可能なパターン
    2. 最後の引数がクロージャの場合は引数の外に出せるパターン

クロージャの省略形

次のようなクロージャを例に見比べてみましょう。

var myFunc : (i:Int, j:Int) -> Int
1.0. 省略なし

まずは省略しない記述。

myFunc = { (i:Int, j:Int) -> Int in return i + j }
1.1. 型の省略が可能なパターン

型が推論できるため省略できる。

myFunc = { (i, j) in return i + j }
1.2. return文の省略が可能なパターン

処理内容がreturn文の一行のみであるため省略する。

myFunc = { (i, j) in i + j }
1.3. 局所引数名の省略が可能なパターン

Swiftでは、シェルスクリプトの位置パラメータのような変数が用意されている。
これを利用すると、引数名 in を省略できる。

myFunc = { $0 + $1 }

引数としてのクロージャ

2.1. クロージャ1個のみを引数とする場合の( )が省略可能
let x:Int = 100, y:Int = 200
let hoge = { (f:((Int, Int) -> Int)) -> Int in
    return f(x, y)
}
let ans = hoge {$0 + $1}
2.2. 最後の引数がクロージャの場合は引数の外に出せる

こちらは省略形ではありませんが覚えておいて損はないでしょう。

let calc = { (i:Int, j:Int, f:((Int, Int) -> Int)) -> Int in
    return f(i, j)
}
let ans = calc(1, 5) {$0 + $1}