使用Reactive Swift将视图模型与视图绑定

时间:2019-07-15 10:02:31

标签: swift xcode reactive-swift

最近我一直在跟随反应迅速,以实现其功能。这是当前可用的游乐场信息。

https://github.com/ReactiveCocoa/ReactiveSwift/blob/master/ReactiveSwift-UIExamples.playground/Pages/ValidatingProperty.xcplaygroundpage/Contents.swift

我面临的问题是如何将视图模型与UI元素连接以监视其值。

我试图模拟具有两个文本字段和一个按钮的简单登录屏幕。我的目的是监视这两个文本字段中的i / p,然后将基于此更改按钮状态。

这是视图模型

import Foundation
import ReactiveSwift

class LoginViewModel {

    /*
     * A property, represented by the PropertyProtocol, stores a value and notifies observers about future changes to that value. A validating protocol is nothing but a property that needs to be validated ( the validation is a lambda function)
     */
    let email: ValidatingProperty<String, Error>
    let password : ValidatingProperty<String,Error>

    init() {
        email =  ValidatingProperty("") { input in

            if (input.isEmpty == true || (input.isEmpty && input.isValidEmail() == false)){

                return .invalid(CustomError.init(title: nil, description: "Improper Email", code:  001))
            }
            return .valid
        }

        password = ValidatingProperty("") { input in

            if (input.isEmpty == true || (input.isEmpty && input.isValidPassword() == false)){

                 return .invalid(CustomError.init(title: nil, description: "Kindly please provide a password", code:  002))
            }else {
                return .valid
            }

        }
    }

}

这是ViewController

class ViewController: UIViewController {
    @IBOutlet weak var emailField: UITextField! // Observable. Signal
    @IBOutlet weak var passwordField: UITextField! // Observable. Signal

    @IBOutlet weak var submitBtn: UIButton! 

    var viewModel: LoginViewModel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        viewModel = LoginViewModel()

    }
}

当我尝试遵循游乐场的代码{code} viewModel.email <〜formView.emailField.reactive             .continuousTextValues.skipNil(){code}进入示例代码,它给我一个错误,指出“ UITextField类型”的Value?没有成员“反应性”。我添加了可用的帮助器功能,emailField没有反应式类别,反之亦然。

1 个答案:

答案 0 :(得分:0)

我发现要进行UI绑定,该项目需要ReactiveCocoa pod库。