gpt4 book ai didi

ios - 在 Swift 中使用 ReactiveCocoa 4 观察对象属性

转载 作者:搜寻专家 更新时间:2023-10-31 22:14:11 24 4
gpt4 key购买 nike

作为序言,这可能是一个非常简单和/或无知的问题。

在 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/

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