有没有办法在Swift中制作可观察的枚举(KVO)
发布时间:2020-12-14 04:40:08 所属栏目:百科 来源:网络整理
导读:我正在尝试使用Rx Swift在MVVM中进行绑定. 我有一个枚举: enum Color : Int { case Red = 0,Green} 和测试类 class Test : NSObject { var color: Color = .Red dynamic var test: String? { didSet { print("didSet (test)") } }} 并希望观察如下变化: t
我正在尝试使用Rx
Swift在MVVM中进行绑定.
我有一个枚举: 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) 但该计划与此冲突 简单String工作的代码: test.rx_observe(String.self,"test").subscribeNext { string in print("Observer (string)") }.addDisposableTo(bag) test.test = "1" test.test = "2" 我发现here使得继承的类不是来自NSObject我应该让它变得动态,但我无法使Enum动态化. 解决方法
您无需使用KVO执行此任务.
只需使用这样的BehaviorSubject: 像这样创建一个私有字段: let colorSubject = BehaviorSubject<Color?>(value: nil) 然后你有一个像这样的属性,通知BehaviorSubject值确实发生了变化. var color : Color? { didSet { colorSubject.onNext(color) } } 要订阅任何更改,请使用与此相同的语句: let disposable = colorSubject.subscribeNext { (color: Color?) -> Void in // Do something with it. } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |