2017-01-26 6 views
0

Я взял на себя проект iOS, который реализует ReactiveCocoa 2.4.7 с использованием CocoaPods. Приложение было запрограммировано в Swift 1.2, но позже было обновлено и теперь Swift 2.3. Однако ReactiveCocoa не обновлен. Я сейчас в ситуации, когда моя цель - обновить приложение до Swift 3, но для этого мне также придется обновить ReactiveCocoa.Bumping от ReactiveCocoa 2.4.7 до ReactiveCocoa 5.0.0

В ReactiveCocoa 2.4.7, если я прав, я могу наблюдать значения, которые наследуются от NSObject, если у них есть ключевое слово dynamic. Из того, что я понимаю, это сделать его доступным для RAC, который создан в Objective-C. Нет ли такой вещи в 5.0.0? Должен ли я изменить все свои переменные из

dynamic var name:String? = "MyName"

в

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

Это правильный эквивалент в 5.0.0?

+0

Да. Если вы не используете часть Cocoa, вы можете просто установить 'ReactiveSwift' в любом случае, –

ответ

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 макрос, который работает через КВО (в Swift вас должен был использовать wrapper для макроса). Для этого в Swift вам нужно использовать ключевое слово dynamic для свойства, чтобы включить KVO.

Эквивалент этому в RAC 5.0 равен DynamicProperty<Value>. Однако, как указано в документации:

Используйте этот класс только в крайнем случае! MutableProperty, как правило, лучше, если КВЦ/КВО не требуется в API вы используете

Поэтому:

Да:, MutableProperty большую часть времени является правильным эквивалентом. Но для этого требуется сделать больше изменений и не будет работать так же, как и RACObserve.

С RACObserve или DynamicProperty вы бы просто установили person.name = "Rudolph", и наблюдатели от name будут называться.

С MutableProperty вам необходимо установить person.name.value = "Rudolph".

Смежные вопросы