2014-12-27 51 views
0

在文件AI定義我的變種:後來斯威夫特:變量不改變(可能是全球性的問題)

var playBegin = false 

在同一文件中,在函數的末尾:

var playBegin = true 

在文件B :

struct pbVariableCheck { 
    var playBegin: Bool { 
     didSet { 
      if playBegin == true { 
       println("\(playBegin)") 
      } 
     } 
    } 
} 

但是,我的財產觀察員在這裏不承認改變,因此沒有觀察到任何結果?我可能做錯了什麼?

回答

1

您正在重新聲明您的playBegin每次與var。使用playBegin = true而不是分配時。

您只能觀察類或結構的屬性而非全局變量。因此,如果全局更改屬性,它將不會通知您的類是本地的,並且將在類或類的實例的方法中更改時通知您。

struct pbVariableCheck { 
var playBegin: Bool { 
    didSet { 
     if playBegin == true { 

      println("\(playBegin)") 
     } 
    } 
} 
} 

//In file A: 
class A { 
    init() { 
    var a = pbVariableCheck(playBegin: false) 
    a.playBegin = true //Change the value on instance of `pbVariableCheck` 
    } 
} 
+0

gabbler建議如此,我改變它,但適當的觀察員不更新。 – 2014-12-27 17:39:06

+0

@WilliamClark你只需要在stuct中設置屬性而不是在struct.First之外的所有屬性'var playBegin = true'並且只給它們分配結構方法或其實例 – codester 2014-12-27 17:41:25

+0

請更新你的答案,使它更清晰一些,我有麻煩理解你, – 2014-12-27 17:43:37

0

嘗試將var var playBegin = true更改爲playBegin = true,前者定義一個新的局部變量。

+0

沒有變化。 – 2014-12-27 17:36:06