我正在使用SwiftUI构建一个本地IOS应用程序。在用户点击按钮之前,我应该使用RXSwift来实时验证表单的一些字段。特别是,我需要对文本字段、日期字段、数字字段和电子邮件字段进行验证检查。
如果这个问题有点笼统,请原谅,但我是应用程序的初学者。
有人能解释一下我如何使用SwiftUI和RXSwift进行验证吗?如果你有任何例子,那就太完美了。
提前感谢你的好意!
好吧,我要说的是,在学习SwiftUI时,你可能不应该使用Libraries,尤其是RxSwift
。学习应用程序开发应该从坚实的基础上学习,而不是从预先构建的代码块中学习。当你掌握这项技能时,理解概念和基本原理将对你有很大帮助。话虽如此,我的观点是RxSwift只不过是一根拐杖,SwiftUI已经拥有了你所需要的一切,并以一种简单的方式做到了这一点。
关于你的实际问题,我假设你根本不知道如何在SwiftUI中进行验证,所以我会尽我所能回答这个问题,并在过程中进行解释。
查看示例
struct TestView: View {
@ObservedObject var testModel = TestModel()
var body: some View {
VStack(alignment: .center) {
Text(testModel.isTextFieldValid() ? "Valid" : "Not Valid")
TextField("Some Text", text: $testModel.textFieldText)
}
}
}
在我们的View Example
上有一些关键的事情需要注意,首先,注意对象是我们在下面创建的ViewModel
的@ObservedObject
。这就是我们将所有数据与视图联系起来的方式。这也是我们Bind
数据的方式。就像RxSwift
一样,如果我们更改视图,我们的模型也会更新,如果我们改变模型,我们的视图也会更新。在这个View Example
中,我有一个绑定到函数.isTextFieldValid()
的文本字段,这就是我检查文本是否有效的方式。现在,您可以进入各种不同的验证技术,但这都是用例。您可能只是在验证空字符、特定字符、长度或您可能要查找的任何数量的条件。我有一个字段,它也与视图模型的textFieldText
属性绑定,该方法将对其进行检查。
视图模型示例
class TestModel: ObservableObject {
@Published var textFieldText = "Hello"
func isTextFieldValid() -> Bool {
textFieldText.count > 0
}
}
在视图模型(@ObservableObject
(中,我有一个@Published
属性textFieldText。视图的Text()
在其第二个参数中绑定到该值,例如text: $testModel.textFieldText
,其中输入的任何文本都将发送到模型上的该属性。这就是它变得有趣的地方。无论何时更新@State
或@ObservedObject
,都会重新绘制整个视图。这就是为什么这里的函数isTextFieldValid()
不需要是@Published
,因为textFieldText被更新,视图被重新绘制,并且这个方法被再次调用。因此,它将进行检查。在我的示例中,我只是验证文本字段是否包含超过0个字符。使用相同的原理,您可以很容易地看到RxSwift
与SwiftUI的原生工具相比没有任何优势。如果你构建这个简单的例子,你会看到";Live Validation";在文本字段中键入时所期望的。