ふむふむ2
http://qiita.com/jumbOS5/items/517c4f7e24a9d43bd43d#comment-b8ff365f19cec5bb8d7c
takabosoft さん、worthmine さん
ご指摘いただきありがとうございました!
クロージャ
javascriptを書いていたときに本当に理解できなくてつらかった思い出の品。
今の理解としてはクロージャとは・・・
クロージャとは、関数内のローカル変数以外の名前解決が、呼び出し時のスコープではなく宣言時のスコープによって行われるもの。またそのような機能を持った関数
という説明が一番しっくり来る。
swiftでの記法
これは最初見たとき違和感しかなかった・・・
でも慣れるとjsよりはマシとも思うようになった。
{ (パラメータ,..) -> 戻り値の型 in
文
}
サンプルコード
// 1 引数にクロージャを渡す例
func hikisuuGaClosure(a:Int,b:Int,clousure:(Int,Int)->Int){
println(clousure(a,b))
}
var kaeritiGaTasu:(Int,Int)->Int = { (a : Int , b : Int) -> Int in
return a + b
}
var kaeritiGaKakeru:(Int,Int)->Int = { (a : Int , b : Int) -> Int in
return a * b
}
hikisuuGaClosure(3, 3, kaeritiGaTasu)
hikisuuGaClosure(3, 3, kaeritiGaKakeru)
// 2 よくあるjavascriptのサンプルで良く見るクロージャ的な使い方、
// グローバルスコープのように扱える
func closureSample(a:Int)->( )->Int{
var ans = 1
return { ( ) -> Int in
ans += 1
return ans
}
}
var f = closureSample(2)
println(f()) // 2
println(f()) // 3
println(f()) // 4
swiftでよく出てきそうなのは上の二つだと思う。
あとAlamofireやSpringのコードを見ているとclosureをちょいちょい使っている。
まねできる部分を探そう・・・
参考記事
Swift のクロージャが面白い
[JavaScript] 猿でもわかるクロージャ超入門 1 問題
JavaScriptでクロージャ入門
swift closure - codable