从ReactiveCocoa 2.4.7转移到ReactiveCocoa 5.0.0

时间:2017-01-26 14:40:30

标签: swift reactive-cocoa reactive-cocoa-5

我接管了一个使用CocoaPods实现ReactiveCocoa 2.4.7的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中的正确对应吗?

1 个答案:

答案 0 :(得分:0)

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

您必须为ReactiveCocoa 2.4.7在Swift 3中工作所做的所有更改都将归因于Swift 3 imports ObjC Code compared to how Swift 2 did的变化。

请参阅此相关问题。 Converting to Swift 3 renamed my own Objective-C method

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

否:在RAC 2.x中,您可以通过NSObject宏观察RACObserve的任何属性,该宏通过KVO工作(在Swift中您必须使用{ {3}}用于宏)。要在Swift中使用此功能,您需要使用该属性的dynamic关键字来启用KVO。

RAC 5.0中与此相当的是DynamicProperty<Value>。 但是,正如文档所述:

  

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

因此:

是:MutableProperty大部分时间都是正确的等价物。但它需要您进行更多更改,并且不会像RACObserve那样工作。

使用RACObserveDynamicProperty,您只需设置person.name = "Rudolph",即可调用name属性的观察者。

使用MutableProperty,您必须设置person.name.value = "Rudolph"

相关问题