作为序言,这可能是一个非常简单和/或无知的问题。
在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向信号生成器添加map函数以查看它是否正在触发,但在更新tempObject.property时没有看到任何内容。再说一次,这可能是我所遗漏的一件小事,非常感谢。
修改
NachoSoto钉了它 - 我需要让我的属性KVO兼容。我也结束了这样做:
let tempObjectSignal: MutableProperty<TempObject> = MutableProperty(tempObject)
let propertyObserver: MutableProperty<String> <~ tempObjectSignal.producer.map({ $0.property })
每当tempObject.property更新时,我都要确保调用
tempObjectSignal.value = tempObject
这会发出所有必要的信号。但是,我不知道这是否打破了任何最佳做法。让我知道你的想法!
答案 0 :(得分:5)
MutableProperty(value)
创建了一个可变属性but only with value
that as the initial value。
您要使用的是DynamicProperty
,它将使用Objective-C运行时和KVO
来检测对象属性的更改:
let property = DynamicProperty(tempObject, "property")
但是,出于这个原因,您需要确保要观察的属性是Objective-C运行时的一部分,方法是使类成为NSObject
的子类,并使用{{ 1}}关键字:
dynamic
或使用class TempObject: NSObject {
dynamic var property: String
}
确保将其导出到运行时:
@objc