在 Swift 中使用 ReactiveCocoa 4 观察对象属性
Observing object properties with ReactiveCocoa 4 in Swift
作为序言,这可能是一个非常简单的 and/or 无知问题。
在 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)
据我了解,我应该可以使用 属性Observer 来查看对 tempObject.property 的更改。我尝试从 属性Observer 向信号生成器添加一个映射函数以查看它是否正在触发,但在更新 tempObject.property 时没有看到任何东西。再次,可能是我遗漏的一件小事,非常感谢。
编辑
NachoSoto 做到了 - 我需要让我的 属性 KVO 兼容。我也结束了这样做:
let tempObjectSignal: MutableProperty<TempObject> = MutableProperty(tempObject)
let propertyObserver: MutableProperty<String> <~ tempObjectSignal.producer.map({ [=12=].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 运行时的一部分,方法是将 class 设为子[= NSObject
的 32=],并通过使用 dynamic
关键字:
class TempObject: NSObject {
dynamic var property: String
}
或使用 @objc
确保它被导出到运行时:
class TempObject: NSObject {
@objc var property: String
}
作为序言,这可能是一个非常简单的 and/or 无知问题。
在 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)
据我了解,我应该可以使用 属性Observer 来查看对 tempObject.property 的更改。我尝试从 属性Observer 向信号生成器添加一个映射函数以查看它是否正在触发,但在更新 tempObject.property 时没有看到任何东西。再次,可能是我遗漏的一件小事,非常感谢。
编辑
NachoSoto 做到了 - 我需要让我的 属性 KVO 兼容。我也结束了这样做:
let tempObjectSignal: MutableProperty<TempObject> = MutableProperty(tempObject)
let propertyObserver: MutableProperty<String> <~ tempObjectSignal.producer.map({ [=12=].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 运行时的一部分,方法是将 class 设为子[= NSObject
的 32=],并通过使用 dynamic
关键字:
class TempObject: NSObject {
dynamic var property: String
}
或使用 @objc
确保它被导出到运行时:
class TempObject: NSObject {
@objc var property: String
}