LoginSignup
6
6

More than 5 years have passed since last update.

swift勉強しててふむふむ思った事3【closure】

Posted at

ふむふむ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でよく出てきそうなのは上の二つだと思う。

あとAlamofireSpringのコードを見ているとclosureをちょいちょい使っている。
まねできる部分を探そう・・・

参考記事

Swift のクロージャが面白い
[JavaScript] 猿でもわかるクロージャ超入門 1 問題
JavaScriptでクロージャ入門
swift closure - codable

6
6
1

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