首页 > 解决方案 > 使用 RXSwift 的 SwiftUI 表单验证?

问题描述

我正在使用 SwiftUI 构建本机 IOS 应用程序。在用户单击按钮之前,我应该使用 RXSwift 实时验证表单的某些字段。特别是,我需要对文本字段、日期、数字字段和电子邮件字段进行验证检查。

如果问题有点笼统,请原谅,但我是应用程序的初学者。

有人可以解释一下如何使用 SwiftUI 和 RXSwift 进行验证吗?如果你有任何例子,那就完美了。

提前感谢您的好意!

标签: iosvalidationswiftuirx-swift

解决方案


好的,我要反对你可能不应该使用库,尤其是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,输入的任何文本都会发送到模型上的该属性。这就是有趣的地方。每当更新@Stateor @ObservedObject时,都会重新绘制整个视图。这就是为什么这里的函数,isTextFieldValid()不需要,@Published因为 textFieldText 被更新,视图被重绘,并且这个方法被再次调用。结果它会检查。在我的示例中,我只是验证文本字段是否包含超过 0 个字符。使用相同的主体,您可以轻松了解如何RxSwift与 SwiftUI 的原生工具相比没有任何优势。如果您构建这个简单的示例,您将在输入文本字段时看到您期望的“实时验证”。


推荐阅读