电子邮件验证有条件绑定中的绑定值必须为可选类型
问题描述:
我有下面的代码来检查字符串是否是有效的电子邮件。更新到1.2雨燕之后,我现在看到的错误:电子邮件验证有条件绑定中的绑定值必须为可选类型
Bound value in a conditional binding must be of Optional type
上线
if let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
我不知道我应该做的消除这种误差。有什么建议么?
感谢
func isValidEmail(testStr:String) -> Bool {
println("validate calendar: \(testStr)")
let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
if let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx) {
return emailTest.evaluateWithObject(testStr)
}
return false
}
println("Email is: \(isValidEmail(email))")
答
更改您的功能为此:
func isValidEmail(testStr : String) -> Bool {
println("validate calendar: \(testStr)")
let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
if emailTest.evaluateWithObject(testStr) {
return true
}
return false
}
或者,你可以把它改成这样太:
var emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
var result = emailTest.evaluateWithObject(testStr)
return result
而且应该也是工作。我希望这对你有所帮助。
答
好消息! NSPredicate(format:)
似乎不是一个可靠的初始化程序,因此不需要测试和解包它 - 它保证可以正常工作。所以,你可以只写:
func isValidEmail(testStr:String) -> Bool {
println("validate calendar: \(testStr)")
let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailTest.evaluateWithObject(testStr)
}
(我没有做安装6.2但据推测它是短暂这样的事情之间failable引入并重新审计,并标记它犯错)
太好了。谢谢。 –
原始提问者的'let'比'var'好。 –
@AirspeedVelocity是的,你是对的,答案格式化 –