gpt4 book ai didi

swift - 有没有办法在 Swift (KVO) 中制作可观察枚举

转载 作者:搜寻专家 更新时间:2023-10-30 23:09:46 24 4
gpt4 key购买 nike

我正在尝试使用 RxSwift 在 MVVM 中进行绑定(bind)。我有一个 Enum :

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"

我找到了 here使类继承自 NSObject我应该做到dynamic , 但我做不到 Enum动态的。有没有办法制作Enum可观察?

最佳答案

您不需要为此任务使用 KVO。只需像这样使用 BehaviorSubject:

像这样创建一个私有(private)字段:

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.
}

关于swift - 有没有办法在 Swift (KVO) 中制作可观察枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36031546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com