我收到了以下编译错误
“可选类型'String的值?'没打开;你的意思是用 '!'或'?'?“
这是我的代码
@IBAction func registerButtonTapped(sender: AnyObject)
{
let userEmail = userEmailTextField.text;
let userPassword = userPasswordTextField.text;
let userConfirmPassword = confirmPasswordTextField.text;
// check for empty fields
if userEmail.isEmpty || userPassword.isEmpty || userConfirmPassword.isEmpty
{
//Display alert message
displayMyAlertMessage("All fields are required");
return;
}
错误显示在第:
行if userEmail.isEmpty || userPassword.isEmpty || userConfirmPassword.isEmpty
答案 0 :(得分:1)
了解Swift基础知识,查看Optional Chaining指南以获取有关此类问题的帮助。
但总的来说......
任何textField.text
属性都是可选的,这意味着它可以是nil。
因此,像userEmail
这样的变量也是可选的,可能是零。
您无法在未首先解包的情况下调用可选变量的属性或方法。有两种方法可以做到这一点。
userEmail!.isEmpty
表示您保证userEmail不是nil
userEmail?.isEmpty
说可能你不确定并且只检查isEmpty是userEmail恰好不是nil
您也可以使用if:
打开可选项if let userEmail = userEmail, userPassword = userPassword, userConfirmPassword = userConfirmPassword where userEmail.isEmpty || userPassword.isEmpty || userConfirmPassword.isEmpty {
//do stuff
}
这是我能给出的最好的简短解释。学习,学习,编码。
答案 1 :(得分:0)
您尚未打开代码中的文本字段。
系统不知道文本字段中是否存在文本。所以,当你说:
let userEmail = userEmailTextField.text;
let userPassword = userPasswordTextField.text;
let userConfirmPassword = confirmPasswordTextField.text;
userEmail,userPassword和userConfirmPassword中的值是Optional Strings。要强行打开它们,您可以执行以下操作:
let userEmail = userEmailTextField.text!;
let userPassword = userPasswordTextField.text!;
let userConfirmPassword = confirmPasswordTextField.text!;
但是,请记住,如果用户没有在文本字段中输入任何值,您将会崩溃。
而不是强行展开,你应该使用安全解包,如下所示:
if let userEmail = userEmailTextField.text {
//Do something
} else {
//Handle case where input is nil
}
您可以阅读有关选项及其解包的更多信息here。