我正在尝试在MVVM中使用RxSwift进行绑定。
我有一个枚举
:
enum Color : Int {
case Red = 0, Green
}
测试的类
class Test : NSObject {
var color: Color = .Red
dynamic var test: String? {
didSet {
print("didSet \(test)")
}
}
}
我希望您能够观察到像以下这样的更改:
test.rx_observe(Color.self, "color").subscribeNext { (color) -> Void in
print("Observer \(color)")
}.addDisposableTo(bag)
但是程序崩溃并显示以下错误信息:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<RDProject.Test 0x7ff373513020> addObserver:<RxCocoa.KVOObserver 0x7ff37351a420> forKeyPath:@"color" options:5 context:0x0] was sent to an object that is not KVC-compliant for the "color" property.'
以下是简单的 String
代码:
test.rx_observe(String.self, "test").subscribeNext { string in
print("Observer \(string)")
}.addDisposableTo(bag)
test.test = "1"
test.test = "2"
我在这里发现,为了使继承自
NSObject
的类不再继承该类,我应该将其设置为dynamic
。但我无法让Enum
成为动态枚举。
有没有一种方法可以使Enum
可观察?
致命错误:无法从 KeyPath Swift.ReferenceWritableKeyPath 中提取字符串...
。你能确认该解决方案仍然有效吗? - Jeroen@objc
注释该字段可以修复崩溃并使其再次正常运行。我更新了我的答案以反映这一点。希望能有所帮助 :) - tomahh@objc
是使其工作的最后一步。但我仍然有一个问题,即该属性是“MyEnumType?”,因此是可选的。这在Objective-C中无法表示。我认为这个问题无法解决。但你回答了我的问题,这很有效 :-) - Jeroen