作为序言,这可能是一个非常简单和/或无知的问题。
在 ReactiveCocoa 2.x 中,我们可以使用 RACObserve 和 RAC 来观察对象的属性。根据我在 Reactive 3 和 4 中可以找到的文档,我们现在使用 PropertyType 来观察对象属性的变化。到目前为止,在使用 MutableProperty 或 DynamicProperty 时,我无法观察到任何属性更改。
class TempObject {
var property: String
}
let tempObject = TempObject()
let propertyObserver: MutableProperty<String> = MutableProperty(tempObject.property)
据我了解,我应该能够使用 propertyObserver 查看对 tempObject.property 的更改。我尝试从 propertyObserver 向信号生成器添加一个映射函数以查看它是否正在触发,但是在更新 tempObject.property 时没有看到任何东西。再次强调,这可能是我遗漏的一件微不足道的事情,非常感谢。
编辑
NachoSoto 成功了——我需要让我的属性(property)符合 KVO 标准。我也结束了这样做:
let tempObjectSignal: MutableProperty<TempObject> = MutableProperty(tempObject)
let propertyObserver: MutableProperty<String> <~ tempObjectSignal.producer.map({ $0.property })
每当 tempObject.property 更新时,我一定要调用
tempObjectSignal.value = tempObject
这会触发所有必要的信号。不过,我不知道这是否违反了任何最佳实践。让我知道你的想法!
最佳答案
MutableProperty(value)
创建一个可变属性 but only with value
that as the initial value .
你要用的是DynamicProperty
,它将使用 Objective-C 运行时和 KVO
来检测对象属性的变化:
let property = DynamicProperty(tempObject, "property")
但是,出于这个原因,您需要确保要观察的属性是 Objective-C 运行时的一部分,方法是将该类设为 NSObject
的子类,或者使用dynamic
关键字:
class TempObject: NSObject {
dynamic var property: String
}
或者使用@objc
来确保它被导出到运行时:
class TempObject: NSObject {
@objc var property: String
}
关于ios - 在 Swift 中使用 ReactiveCocoa 4 观察对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34831299/