1

我最近一直在关注响应式 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
            }

        }
    }

}

这是视图控制器

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?”类型的值 没有成员“反应”。我添加了可用的辅助函数,emailField 没有响应式类别,反之亦然。

4

1 回答 1

0

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

于 2019-07-15T11:32:58.623 回答