Swift 如何使用KVO观察协议';谁的财产?

Swift 如何使用KVO观察协议';谁的财产?,swift,dynamic,protocols,key-value-observing,Swift,Dynamic,Protocols,Key Value Observing,当我尝试向协议的属性添加dynamic修饰符时,Xcode显示错误只有类的成员可能是动态的。 因此,我尝试了另一种方法,在类中而不是在协议中添加动态,Gettable属性必须通过编写{get} 这是我的代码: 斯威夫特议定书 斯威夫特 如果我以正常方式观察myproperty,当otherproperty值更改时,它不会触发KVO通知,因为myproperty值在调用或使用之前不会更改。 非常感谢 我认为您不能使协议属性动态化,只能使类/结构动态化 编辑: 您应该能够做的一件事是使类从NSObj

当我尝试向协议的属性添加
dynamic
修饰符时,Xcode显示错误
只有类的成员可能是动态的。
因此,我尝试了另一种方法,在类中而不是在协议中添加
动态
,Gettable属性必须通过编写
{get}

这是我的代码:

斯威夫特议定书 斯威夫特 如果我以正常方式观察
myproperty
,当
otherproperty
值更改时,它不会触发KVO通知,因为
myproperty
值在调用或使用之前不会更改。

非常感谢

我认为您不能使协议属性动态化,只能使类/结构动态化

编辑: 您应该能够做的一件事是使类从NSObject继承,然后实现调用KVO willChangeValueForKey和didChangeValueForKey方法的willSet和didSet方法


在我学习动态属性之前,我用一个Swift类完成了这项工作,它起了作用。它应该也适用于协议,但使其工作的负担在于实现协议的类或扩展。

我认为我们可以使用一些小技巧来实现我们的目标。在
协议中
添加名为
observeKeyPath
的属性,如下所示:

斯威夫特议定书 斯威夫特 斯威夫特先生
提示:如果键路径使用点语法,如
“object.property”
,请确保
对象
属性
均由
动态
修改,谢谢您的建议!
var myproperty: Int {get} 
dynamic var myproperty: Int {  
  return otherproperty  
}
var myproperty: Int {get} 
var observeKeyPath: String {get}
dynamic otherproperty: AnyObject!
var myproperty: Int {  
  return otherproperty  
}
var observeKeyPath {
  return "otherproperty"
}
self.addObserver(protocol, 
      forKeyPath: protocol.observeKeyPath, 
         options: .New | .Old, 
         context: nil)