2017-01-26 2 views
0

J'ai pris en charge un projet iOS qui implémente ReactiveCocoa 2.4.7 en utilisant CocoaPods. L'application a été programmée dans Swift 1.2, mais a été mise à jour plus tard, et est maintenant Swift 2.3. Cependant, ReactiveCocoa n'a pas été mis à jour. Je suis maintenant dans une situation où mon objectif est de mettre à jour l'application vers Swift 3, mais pour ce faire, je devrai également mettre à jour ReactiveCocoa. Dans ReactiveCocoa 2.4.7, si je suis correct, je suis capable d'observer les valeurs qui héritent de NSObject, tant qu'ils ont le mot-clé dynamicBumping de ReactiveCocoa 2.4.7 à ReactiveCocoa 5.0.0

D'après ce que je comprends, c'est pour le rendre accessible à RAC qui est fait en Objective-C. N'y a-t-il pas une telle chose dans 5.0.0? Est-ce que je dois changer toutes mes variables de

dynamic var name:String? = "MyName"

à

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

Est-ce l'équivalent correct dans 5.0.0?

+0

Oui. Si vous n'utilisez pas la partie Cocoa, vous pouvez tout simplement installer 'ReactiveSwift', –

Répondre

0

ReactiveCocoa 2.4.7 est écrit en ObjC. Si peut mettre à jour le projet à Swift 3 sans mise à niveau ReactiveCocoa.

Toutes les modifications que vous aurez à apporter à ReactiveCocoa 2.4.7 pour fonctionner dans Swift 3 seront dues au changement dans la façon dont Swift 3 imports ObjC Code compared to how Swift 2 did.

Voir cette question connexe. Converting to Swift 3 renamed my own Objective-C method

En ce qui concerne votre question d'équivalence, la réponse est oui et non

No: 2.x RAC que vous avez pu observer toute propriété d'un NSObject via le RACObserve macro qui fonctionne via KVO (à Swift vous a dû utiliser un wrapper pour la macro). Pour que cela fonctionne avec Swift, vous devez utiliser le mot-clé dynamic pour que la propriété active KVO. L'équivalent de ceci dans RAC 5.0 est DynamicProperty<Value>. Cependant, comme la documentation l'indique:

Utilisez ce cours uniquement en dernier recours! MutableProperty est généralement mieux à moins KVC/KVO est requise par l'API que vous utilisez

Par conséquent:

Oui:, MutableProperty la plupart du temps est l'équivalent correct. Mais il vous oblige à faire plus de changements et ne fonctionnera pas de la même manière que RACObserve l'a fait.

Avec RACObserve ou DynamicProperty, vous devez simplement définir person.name = "Rudolph" et les observateurs de la propriété name seront appelés.

Avec MutableProperty, vous devrez définir person.name.value = "Rudolph".