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

时间:2015-04-12 22:35:10

标签: macos validation email swift

我有以下代码来检查字符串是否是有效的电子邮件。更新到Swift 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._%+-]+@[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))")

2 个答案:

答案 0 :(得分:4)

将您的功能更改为:

func isValidEmail(testStr : String) -> Bool {
    println("validate calendar: \(testStr)")
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[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

也应该工作。我希望这能帮到你。

答案 1 :(得分:0)

好消息! NSPredicate(format:)似乎不是一个可用的初始化程序,因此不需要测试和解包它 - 它保证可以正常工作。所以你可以写:

func isValidEmail(testStr:String) -> Bool {
    println("validate calendar: \(testStr)")
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
    let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
    return emailTest.evaluateWithObject(testStr)
}

(我没有安装6.2,但可能是在引入的这些东西和重新审核它并标记它绝对正确之间可以简单地使用)