swift - 组合:如何仅在用户输入后验证文本字段
问题描述
我是 Swift 编程的新手。尝试使用非空验证的用户名和密码字段构建登录页面
这是使用 Combine 进行验证的代码:
private var isUsernameValid: AnyPublisher<Bool, Never> {
$username
.debounce(for: 0.2, scheduler: RunLoop.main)
.removeDuplicates()
.map {
if $0.isEmpty {
self.errorUsername = "Invalid Username"
return false
} else {
self.errorUsername = ""
return true
} }
.eraseToAnyPublisher()
}
private var isPasswordValid: AnyPublisher<Bool, Never> {
$password
.debounce(for: 0.2, scheduler: RunLoop.main)
.removeDuplicates()
.map {
if $0.isEmpty {
self.errorPassword = "Invalid Password"
return false
} else {
self.errorPassword = ""
return true
} }
.eraseToAnyPublisher()
}
private var isFormValid: AnyPublisher<Bool, Never> {
Publishers.CombineLatest(isUsernameValid, isPasswordValid)
.debounce(for: 0.2, scheduler: RunLoop.main)
.map { $0 && $1 }
.eraseToAnyPublisher()
}
一旦我进入登录页面,就会显示错误消息。我只想在用户开始输入文本字段后显示验证错误。请帮忙
解决方案
您可以使用.dropFirst()
来摆脱初始值(即空字段)。
$username
.dropFirst()
.debounce(for: 0.2, scheduler: RunLoop.main)
.dropFirst
还可以在调用发布者链的其余部分之前使用Int
参数来删除x
值的数量,这通常很有用。
推荐阅读
- ms-access - 拆分数据库后的 MS Access 表单组记录
- angular - Angular子类模板访问超类中定义的变量
- swift - 从 php 脚本发送 VoIP 推送时未收到通知
- c++ - MATLAB 在我运行 MEX 文件时崩溃
- node.js - 如何查询 mongoose 中的 2 个集合?
- scala - 从图的 RDD 创建边的 RDD
- java - 如何保护来自最终用户浏览器的 api 调用中的合作伙伴凭据
- javascript - 通过 Websocket 将图像从 Javascript 客户端发送到 C# 服务器并将其保存在文件中
- sgmlreader - 使用 SGML Reader 关闭单个 HTML 标签
- wordpress - WordPress 查询不工作