2017-01-21 8 views
0

、これは正常に動作します:静的プロパティオブザーバーいつものように

しかし
var someVar = 1{ 
    didSet{ 
     callSomeMethod() 
    } 
} 

、私はvarは静的作るとき、私はもうメソッドを呼び出し傾けます。

static var someVar = 1{ 
    didSet{ 
     callSomeMethod() // -> gives error 
    } 
} 

エラーは以下のとおりです。静的変数にプロパティオブザーバを持つことはできませんか?もしそうなら、代替手段はありますか?誰か助けてください。

enter image description here

+1

someVarとcallSomeMethodが定義されている場所を追加できますか?同じクラスですか? – muescha

答えて

2

初期セットアップ

私はあなたがこのテストを意味すると思う:

class Test { 

    var someVar = 1{ 
     didSet{ 
      callSomeMethod() 
     } 
    } 

    func callSomeMethod(){ 
     print("Test") 
    } 
} 

var test = Test() 

print(test.someVar) 
test.someVar = 2 
print(test.someVar) 

私は結果を得る:静的VARSを呼び出すことはできません

1 
Test 
2 

をインスタンス機能

私は静的を追加し、その後、私はあまりにも静的関数を設定する必要があります。

class Test { 

    static var someVar = 1{ 
     didSet{ 
      callSomeMethod() 
     } 
    } 

    //this need to be static too 
    static func callSomeMethod(){ 
     print("Test") 
    } 

} 

var test = Test() 

print(Test.someVar) 
Test.someVar = 2 
print(Test.someVar) 

私は結果を得る:

1 
Test 
2 

をインスタンス機能

にアクセスするためのインスタンスを作成します。

関数呼び出しにアクセスするためのクラスを初期化する(推奨値ではない):

class Test { 

    static var someVar = 1{ 
     didSet{ 
      // init the class to get a instance function 
      Test().callSomeMethod() 
     } 
    } 

    func callSomeMethod(){ 
     print("Test") 
    } 

} 

var test = Test() 

print(Test.someVar) 
Test.someVar = 2 
print(Test.someVar) 

私は結果を得る:

1 
Test 
2 

ファンクション機能が外にあるとき

外は、それはあまりにも

class Test { 

    static var someVar = 1{ 
     didSet{ 
      callSomeMethod() 
     } 
    } 

} 

//this need to be outside 
func callSomeMethod(){ 
    print("Test") 
} 

var test = Test() 

print(Test.someVar) 
Test.someVar = 2 
print(Test.someVar) 

働く私が得る結果:

1 
Test 
2 
関連する問題