Reactivecocoa: 非常基本的TextField / TextView两种方式绑定到viewModel

创建于 2016-07-28  ·  3评论  ·  资料来源: ReactiveCocoa/ReactiveCocoa

我有一个textfieldtextView在我的UIViewController ,在我的ViewModel我有两个String变量,我要绑定的textField变量titletextView变量textBody 。 在RAC2中,使用RAC很简单,但是RAC4和Swift2呢?

我在StackOverFlow中找到了这个:

        let producer = textField.rac_textSignal().toSignalProducer()
            .flatMapError { error in
                return SignalProducer<AnyObject?, NoError>.empty
            }
            .map { text in Int(text as! String) }

        self.viewModel.title <~ producer

但是我得到了Use of undeclared type 'NoError'所以我将其更改为NSError但是现在我得到了: Binary operator '<~' cannot be applied to operands of type 'String' and 'SignalProducer<Int?, NSError>' (aka 'SignalProducer<Optional<Int>, NSError>')

self.viewModel.title是一个简单的var title = ""

我知道我可以做到:

        textField.rac_textSignal()
            .toSignalProducer()
            .map { text in text as! String } // AnyObject -> String
            .filter { string in string.characters.count > 0 } // String -> Bool
            .startWithNext { [weak self] (text) in
                self?.viewModel.title = text
        }

但是为什么要绑定所有这些代码并使用startWithNext[weak self] :(

question

最有用的评论

在ReactiveCocoa 5.0中,在各种UIKit / AppKit控件和视图中提供了诸如reactive.textreactive.textValues

textField.text <~ viewModel.title.producer
viewModel.title <~ textField.textValues

尽管我们在ReactiveCocoa中还没有双向绑定系统,但是上面的代码片段可以在没有无限反馈环的情况下工作。

但是,这仅适用于与控件的绑定。 如果需要,可以在属性之间进行双向绑定,除非它们之间没有介体。

所有3条评论

Swift在对象中没有宏或KVC,因此没有像RAC()这样的绑定魔术。 Swift中的绑定旨在​​以Property类型为目标。

PS:对于NoError类型,您可能需要import enum Result.NoError

在ReactiveCocoa 5.0中,在各种UIKit / AppKit控件和视图中提供了诸如reactive.textreactive.textValues

textField.text <~ viewModel.title.producer
viewModel.title <~ textField.textValues

尽管我们在ReactiveCocoa中还没有双向绑定系统,但是上面的代码片段可以在没有无限反馈环的情况下工作。

但是,这仅适用于与控件的绑定。 如果需要,可以在属性之间进行双向绑定,除非它们之间没有介体。

@andersio我已经看到MutableProperty上的双向绑定。 是否有计划在某个时候继续进行,还是这种绑定超出了ReactiveCocoa / ReactiveSwift的范围? 我很想听到有关此问题的最新消息,因为我经常遇到这个问题,并且总是把我带到这个GitHub问题上。 😉

此页面是否有帮助?
0 / 5 - 0 等级