我在版本3中使用ReactiveCocoa时遇到问题。我想为我的登录视图控制器构建一些视图模型。在我的视图控制器中,我有密码文本字段的出口:
@IBOutlet weak var passwordTextField: UITextField!
在视图模型中,我有文本属性,即密码
public let emailText = MutableProperty<String>("")
问题是如何将它绑定在一起?我能从文本字段中获取SignalProducer:
emailTextField.rac_textSignal().toSignalProducer()
但如何将其绑定到emailText属性?我已经在文档中读到SignalProducer 不一个Signal,但它现在可以创建。方法start()但它以Sink为参数,此时我对设计有点困惑。不应该将emailText作为接收器吗?
答案 0 :(得分:0)
注意:这不是您问题的正确答案,但我认为这可能会对您有所帮助。
如果您只是想将视图绑定到视图模型,我建议您阅读this post,它提供了解决问题的一流解决方案。
从那里,您可以非常简单地实现双向绑定,这样每次视图更改时您的viewmodel都会更新,反之亦然。这是我的扩展名:
class TwoWayDynamic<T> {
typealias Listener = T -> Void
private var viewListener: Listener?
private var controllerListener: Listener?
private(set) var value: T
func setValueFromController(value: T) {
self.value = value
viewListener?(value)
}
func setValueFromView(value: T) {
self.value = value
controllerListener?(value)
}
func setValue(value: T) {
self.value = value
controllerListener?(value)
viewListener?(value)
}
init(_ v: T) {
value = v
}
func bindView(listener: Listener?) {
self.viewListener = listener
}
func bindController(listener: Listener?) {
self.controllerListener = listener
}
func bindViewAndFire(listener: Listener?) {
self.viewListener = listener
listener?(value)
}
func bindControllerAndFire(listener: Listener?) {
self.controllerListener = listener
listener?(value)
}
}
希望它有所帮助!