电子邮件验证有条件绑定中的绑定值必须为可选类型

电子邮件验证有条件绑定中的绑定值必须为可选类型

问题描述:

我有下面的代码来检查字符串是否是有效的电子邮件。更新到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 

而且应该也是工作。我希望这对你有所帮助。

+0

太好了。谢谢。 –

+0

原始提问者的'let'比'var'好。 –

+0

@AirspeedVelocity是的,你是对的,答案格式化 –

好消息! 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引入并重新审计,并标记它犯错)