しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Swiftのカリー化について調べてみた

慣れないリテラルですが、下のように書けば実現できます。
2つ目のメソッドにはラベルを付ける必要があります。

func a(a: String)(b: String) {
    print(a)
    print(b)
}

a("A")(b: "B")

a("A")の型はFunctionになっていました。

func a(a: String)(b: String) {
    print(a)
    print(b)
}

print(a("A").dynamicType) // → String -> ()

aだけセットした状態で使い回す事もできました。

func a(a: String)(b: String) {
    print(a)
    print(b)
}

let myFunc = a("A")
myFunc(b: "B")
myFunc(b: "C")

使いどころ

イマイチ思いつかなかったのですが、強いて言えば下のように共通Closureを取得するメソッドに使えそうだと思いました。

func commonClosure(value1: Double) -> (Double) -> Double {
    return { (value2: Double) -> Double in
        return pow(value2, value1)
    }
}
// ↓ こう書ける
func commonClosure(value1: Double)(value2: Double) -> Double {
    return pow(value2, value1)
}