2016-07-28 21 views
0

以下を参照してください。変数closureは任意のオブジェクト内で呼び出すことができるので、このclosureのコンテキストではselfを定義することはできません。インスタンスクロージャ変数での自己使用

しかし、someFnを「self」を使用できるように定義することは可能ですか?

class A { 
    var value:Int = 3 
    var someFn:emptyFn = { 
    // does not compile, self is not set 
    print (self) 
    } 
} 

A().someFn() 
+1

downvoteを与えた親愛なるユーザー - 理由は何ですか? –

答えて

2

問題は、Aのインスタンスの初期化前selfを使用していることです。

したがって、selfはまだありません。あなたがinit中にあなたの閉鎖foの作成を移動した場合

それは

class A { 
    var value:Int = 3 
    var someFn :() ->() = { } 

    init() { 
     someFn = { print(self) } 
    } 
} 

A().someFn() // A 

に動作します私は内部のselfを使用することができるようにするためには、宣言時に空の値でsomeFnを移入するために必要なinit。 Infact selfは、デフォルト値のないすべてのプロパティが初期化される前に使用することはできません(init)。

+1

ありがとうございます!これは今非常に意味をなさない –

+1

@mingyeow:あなたは歓迎です:) –

+0

なぜ私はdownvote btwを得たかもしれない任意のアイデア? :/ –

関連する問題