Ios Can';t使用Swift对UITextField上的对象进行正则表达式匹配

Ios Can';t使用Swift对UITextField上的对象进行正则表达式匹配,ios,swift,regex,xcode,Ios,Swift,Regex,Xcode,验证用户输入的密码时,Xcode中出现以下错误: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是:“无法在对象Bopster.RegisterPresenter上进行正则表达式匹配。” 这是用于验证在ViewController中作为UITextField输入的密码的方法 func isValidPassword(password: String) -> Bool { let passwordRegex = "^(?=.*\\d)(?

验证用户输入的密码时,Xcode中出现以下错误:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是:“无法在对象Bopster.RegisterPresenter上进行正则表达式匹配。”

这是用于验证在ViewController中作为UITextField输入的密码的方法

func isValidPassword(password: String) -> Bool {
    let passwordRegex = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z!@#$%^&*()\\-_=+{}|?>.<,:;~`’]{8,}$"
    debugPrint(passwordRegex)
    return NSPredicate(format: "SELF MATCHES %@", passwordRegex).evaluate(with: self)
}
然后根据条件,我决定移动或显示错误:

if userPasswordChecked {
    //  True, store it in COStorage.
    COStorage().savePassword(pass: password)
} else {
    //  False, message to user.
    let error = "La constraseña no es valida."
    self.view?.errorLoading(error: error)
}

我尝试了其他模式,但到目前为止,错误似乎与NSPredicate有关。

因为您在RegisterPresenter类中声明了您的
isValidPassword
方法,
self
引用了RegisterPresenter的实例

您只需将方法从
evaluate(with:self)
更改为
evaluate(with:password)
,即可解决问题:

func isValidPassword(密码:String)->Bool{
设passwordRegex=“^(?=.*\\d)(?=.[a-z])(?=.[a-z])[0-9a-zA-z!@$%^&*()\-+{}124;?>。
if userPasswordChecked {
    //  True, store it in COStorage.
    COStorage().savePassword(pass: password)
} else {
    //  False, message to user.
    let error = "La constraseña no es valida."
    self.view?.errorLoading(error: error)
}
func isValidPassword(password: String) -> Bool {
    let passwordRegex = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z!@#$%^&*()\\-_=+{}|?>.<,:;~`’]{8,}$"
    debugPrint(passwordRegex)
    return NSPredicate(format: "SELF MATCHES %@", passwordRegex).evaluate(with: password)
}