2014-12-27 52 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