Как добиться двухстороннего связывания с использованием ReactiveCocoa 4.0 и MVVM

Я работаю в проекте, использующем Reactive Cocoa 4.0 и MVVM(swift 2.0). В модели представления у меня есть строка, которая будет обновляться в соответствии с изменениями текстового поля, но мне нужно обновить это текстовое поле, если строка изменится. Это возможно для двух сторон привязка между текстовым полем и строкой (ageString).

txtAge.rac_textSignal() ~> RAC(objViewModel, "ageString")

2 ответа

Вы можете попробовать код ниже:

viewModel.ageString.producer
         .skipRepeats { [weak self] in
                 $1 == self?.txtAge.text
         }.startWithNext { [weak self] in
                 self?.txtAge.text = $0
}

viewModel.ageString <~ txtAge.rac_textSignal()
        .toSignalProducer()
        .map { ($0 as? String) ?? "" }
        .flatMapError { _ in SignalProducer<String, NoError>.empty }

До RAC 2.x вы могли использовать RACChannels, которые предложили эту функцию (вы можете подписаться на каждый терминал канала и получать уведомления, когда поступают новые значения). Каналы и терминалы не были перенесены в RAC 2.x, поэтому сегодня в RAC нет двухсторонней привязки, но это не должно иметь большого значения, так как вы всегда сможете найти другой (imho лучше) подход,

Для получения дополнительной информации вы можете найти много тем по этой теме в проблемах фреймворка на github, таких как:

Другие вопросы по тегам