ios - 使用 RXSwift 的 SwiftUI 表单验证?
问题描述
我正在使用 SwiftUI 构建本机 IOS 应用程序。在用户单击按钮之前,我应该使用 RXSwift 实时验证表单的某些字段。特别是,我需要对文本字段、日期、数字字段和电子邮件字段进行验证检查。
如果问题有点笼统,请原谅,但我是应用程序的初学者。
有人可以解释一下如何使用 SwiftUI 和 RXSwift 进行验证吗?如果你有任何例子,那就完美了。
提前感谢您的好意!
解决方案
好的,我要反对你可能不应该使用库,尤其是RxSwift
在尝试学习 SwiftUI 时。学习应用程序开发应该从坚实的基础学习,而不是从已经预先构建的代码块中学习。了解概念和基础知识将极大地帮助您掌握这项技能。话虽如此,我的观点是 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
首先要注意一些关键的事情,注意@ObservedObject
那个对象是我们ViewModel
在下面创建的。这就是我们将所有数据与视图联系起来的方式。这也是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
or @ObservedObject
时,都会重新绘制整个视图。这就是为什么这里的函数,isTextFieldValid()
不需要,@Published
因为 textFieldText 被更新,视图被重绘,并且这个方法被再次调用。结果它会检查。在我的示例中,我只是验证文本字段是否包含超过 0 个字符。使用相同的主体,您可以轻松了解如何RxSwift
与 SwiftUI 的原生工具相比没有任何优势。如果您构建这个简单的示例,您将在输入文本字段时看到您期望的“实时验证”。
推荐阅读
- javascript - 如何使用javascript在HTML电子邮件中提取VML(outlook代码)内的href链接?
- applescript - 使用 AppleScript 在当前 Finder 窗口中打开 iCloud
- regex - 正则表达式评估三个字母结构
- r - 在 R 中使用 sample() 生成随机(?)数总是返回相同的结果
- sql-server - 如何在 SQL Server 中获取第一个下划线、第二个下划线、第三个下划线之后的字符
- c# - 亚马逊 MWS ListOrderItems 节流问题
- html - 一些具有相同id的选择,它是正确的还是错误的
- javascript - 无法在快速反应组件中发送 JSON
- android - 某类的意思
- xcode - Xcode 10、sourcery 和 swiftlint 构建阶段顺序