我接管了一个使用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中的正确对应吗?
答案 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
那样工作。
使用RACObserve
或DynamicProperty
,您只需设置person.name = "Rudolph"
,即可调用name
属性的观察者。
使用MutableProperty
,您必须设置person.name.value = "Rudolph"
。