【发布时间】:2021-06-18 14:59:57
【问题描述】:
所以现在在我正在开发的应用程序中,我决定通过迁移到 MVVM 设计模式来重构它。在这里,我了解了著名的“Observables”。
在使用 MVVM 时,我设法了解了它们的工作原理以及它们存在的重要性,我已经阅读了一些关于实现的不同技术的解释。我的意思是技术:
- Observables (我目前正在使用的)
- 事件总线/通知中心
- FRP 技术 (ReactiveCocoa / RxSwift)
我已经这样声明了我的 Bindable 类:
import UIKit
class Bindable<T> {
var value: T? {
didSet {
observer?(value)
}
}
var observer: ((T?) -> ())?
func bind(observer: @escaping (T?) -> ()) {
self.observer = observer
}
}
我想做的是绑定 2 个 UITextField 的 (在我的一个 ViewController 中) 与相应的 ViewModel。在我的 ViewController 中有 2 个文本字段(emailInput - passwordInput)和一个“登录”按钮,除非两个文本字段都不为空,否则我希望禁用它。
为此,我添加了两个文本字段的 this 目标:
emailInput.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
passwordInput.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
然后:
/// Enable / Disable --> Log In button
@objc func textFieldDidChange(_ textField: UITextField) {
if (emailInput.text == "") || (passwordInput.text == "") {
logInButton.enableButton(false)
} else {
logInButton.enableButton(true)
}
}
但我的问题是...如何在我的 ViewModel 中实现同样的功能?
是否可以使用我的 Bindable 类进行双向绑定?
(如果需要更多代码来解决这个问题,请告诉我,我会编辑问题)
【问题讨论】:
-
另外,使用
.isEmpty比比较""更好 -
您好,保罗,感谢您的回复。我无法完全理解在 ViewModel 中要做什么,以及如何让我的 ViewModel 在每次文本更改时检查文本字段。
标签: ios swift mvvm data-binding observable