swift - 用于条件绑定的 Swift Initializer 必须具有 Optional 类型,而不是 if let 语句的“Bool”错误
问题描述
所以我在 Xcode 中编写一个应用程序,这是代码的一部分:
func Signup(_ sender: Any) {
if let email = Email.text != nil, let password =
在第二行我得到一个错误
条件绑定的初始化程序必须具有 Optional 类型,而不是 'Bool'
你能帮我吗?
解决方案
显然,你应该消除它!= nil
。
我还建议:
- 修剪空白,以免有人进入空格以通过验证;
- 使用
isEmpty
修剪过的字符串来确保那里有东西; - 以小写字母开头的属性和方法名称;
- 我个人给我的
UITextField
属性一个TextField
后缀(这样我就可以区分emailTextField
文本字段和email
字符串。
因此,也许是这样的:
@IBAction func didTapSignup(_ sender: Any) {
guard let email = emailTextField.text?.trimmingCharacters(in: .whitespaces),
!email.isEmpty,
let password = passwordTextField.text?.trimmingCharacters(in: .whitespaces),
!password.isEmpty else {
// tell the user that validation failed here ...
// ... and then return
return
}
// do something with `email` and `password`
}
例如,您可能想要检查电子邮件和密码是否通过了一些基本规则:
let emailRegexString = "^[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$" // oversimplified email regex
func isAcceptable(email: String, password: String) -> Bool {
let isEmailAcceptable = email.range(of: emailRegexString, options: .regularExpression) != nil
let isPasswordAcceptable = password.count > 4
return isEmailAcceptable && isPasswordAcceptable
}
接着
@IBAction func didTapSignup(_ sender: Any) {
guard let email = emailTextField.text?.trimmingCharacters(in: .whitespaces),
let password = passwordTextField.text?.trimmingCharacters(in: .whitespaces),
isAcceptable(email: email, password: password) else {
// tell the user that validation failed here ...
// ... and then return
return
}
// do something with `email` and `password`
}
请注意,该 regex 是一种过于简化的电子邮件验证。但是如果你真的想要,你可以对正则表达式发疯。
我还至少要设置我的电子邮件和密码文本字段,以便不允许使用空格。因此,delegate
为电子邮件和密码文本字段指定 ,然后禁止空格:
extension ViewController: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return string.rangeOfCharacter(from: .whitespacesAndNewlines) == nil
}
}
推荐阅读
- hyperledger-fabric - 一个链码,多个资产
- acumatica - Acumatica 和通知模板 - 去除 html 和其他样式标签 - 2019 r1
- python - 其他集合 mongodb 中不存在的查询值
- r - 从R中的数据集中提取特定数字
- typescript - Material UI 和 react-hooks-form 以及使用 typescript 的 yup 验证
- javascript - 使用 HTML5 画布调整图像大小
- r - 在 R 中格式化图形
- c - 为什么当将 void 传递给 int 数组时它不起作用我的编译器说“错误:无效的初始化程序”
- c++ - Storing an std::assume_aligned pointer C++ 20
- vb.net - 获取 ClickOnce 应用的发布版本号