0

我已经接管了一个ReactiveCocoa 2.4.7使用 CocoaPods 实现的 iOS 项目。该应用程序是在 Swift 1.2 中编写的,但后来进行了升级,现在是 Swift 2.3。但是,ReactiveCocoa 尚未更新。我现在的目标是将应用程序升级到 Swift 3,但要做到这一点,我还必须升级 ReactiveCocoa。

在 ReactiveCocoa 2.4.7 中,如果我是正确的,我可以观察到从 NSObject 继承的值,只要它们有dynamic关键字。据我了解,这是为了让用 Objective-C 制作的 RAC 可以访问它。5.0.0中没有这样的东西吗?我是否必须将所有变量从

dynamic var name:String? = "MyName"

let name:MutableProperty<String?> = MutableProperty("MyName")?

这是 5.0.0 中的正确等效项吗?

4

1 回答 1

0

ReactiveCocoa 2.4.7 是用 ObjC 编写的。如果可以在不升级 ReactiveCocoa的情况下将项目升级到 Swift 3 。

为了让 ReactiveCocoa 2.4.7 在 Swift 3 中工作,您必须做出的所有更改都是由于与Swift 2 相比,Swift 3 导入 ObjC 代码的方式发生了变化。

请参阅此相关问题。转换为 Swift 3 重命名了我自己的 Objective-C 方法

关于您的等价问题,答案是“是”和“否”。

否:在 RAC 2.x 中,您可以通过 KVO 工作NSObject的宏观察 a 的任何属性(在 Swift 中,您必须为宏使用包装器)。要在 Swift 中使用此功能,您需要使用该属性的关键字来启用 KVO。RACObservedynamic

在 RAC 5.0 中与此等效的是DynamicProperty<Value>. 但是,正如文档所述:

仅将此类用作最后的手段!MutableProperty通常会更好,除非您使用的 API 需要 KVC/KVO

所以:

是的:MutableProperty大多数时候是正确的等价物。但这需要您进行更多更改,并且不会像RACObserve以前那样工作。

使用RACObserveor DynamicProperty,您只需设置,并调用属性person.name = "Rudolph"的观察者。name

随着MutableProperty,你将不得不设置person.name.value = "Rudolph"

于 2017-06-02T12:11:25.690 回答