【问题标题】:ios ViewModel with ReactiveCocoa v3 and Swift 1.2带有 ReactiveCocoa v3 和 Swift 1.2 的 ios ViewModel
【发布时间】:2015-11-24 11:57:21
【问题描述】:

我在版本 3 中使用 ReactiveCocoa 时遇到问题。我想为我的登录视图控制器构建一些视图模型。在我的视图控制器中,我有密码文本字段的出口:

@IBOutlet weak var passwordTextField: UITextField!

在视图模型中,我有密码文本的属性

public let emailText = MutableProperty<String>("")

问题是如何将它们绑定在一起?我可以从文本字段中获取 SignalProducer:

emailTextField.rac_textSignal().toSignalProducer()

但是如何将它绑定到 emailText 属性?我在文档中读到 SignalProducer 不是信号,但它现在可以创建。有方法 start() 但它以 Sink 作为参数,此时我对设计有点困惑。 emailText 不应该是 Sink 吗?

【问题讨论】:

    标签: ios swift mvvm reactive-cocoa-3


    【解决方案1】:

    注意:这不是您问题的正确答案,但我认为它可能会对您有所帮助。

    如果你只是想将你的视图绑定到你的视图模型,我建议你阅读this post,它为问题提供了一个一流的解决方案。

    从那里,您可以非常简单地实现 2 路绑定,这样您的视图模型就会在每次视图更改时更新,反之亦然。这是我的扩展:

    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)
        }
    }
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 2023-03-15
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多