如何在Swift 4中将2个布尔合并在一起

时间:2019-01-14 10:48:35

标签: ios swift boolean

我正在尝试创建电子邮件验证,以验证电子邮件中的字符@@前后的字符。我能够做到,但是我无法将两者结合在一起。到目前为止,我拥有一个计算属性,该属性仅检查电子邮件是否包含@。如何将它们结合在一起以检查所有条件。

extension String {

    var isEmailFormat: Bool {
        if let range = self.range(of: "@") {
            _ = self[(self.startIndex)..<range.lowerBound]
            _ = self[range.upperBound...]
        }
        return self.contains("@")
    }
}


if !self.emailField.text!.isEmailFormat {
                self.addErrorMessage("Invalid email address")
}

4 个答案:

答案 0 :(得分:3)

其他(布尔)子句用逗号与可选绑定分开:

if let range = self.range(of: "@"), condition1, condition2 { ... }

但是,将切片辅助到_不会进行任何测试,应该是这样的:

var isEmailFormat: Bool {
    if let range = self.range(of: "@"),
        range.lowerBound > startIndex,
        range.upperBound < endIndex {
        return true
    } else {
        return false
    }
}

或者:

var isEmailFormat: Bool {
    if let range = self.range(of: "@") {
        return range.lowerBound > startIndex && range.upperBound < endIndex
    } else {
        return false
    }
}

答案 1 :(得分:2)

在这种情况下最好使用正则表达式。

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

如果要使用2个布尔值,请使用类似return的语句

返回条件1 &&条件2

但我假设您已经知道。

答案 2 :(得分:1)

尝试这种方式

var isEmailFormat: Bool {
    if let range = self.range(of: "@"),
       range.lowerBound > self.startIndex,
       range.upperBound < self.endIndex {
        return true
    } else {
        return false
    }
}

删除包含逻辑的逻辑

如果字符串本身不包含@字符,则range将故意为nil。因此在这种情况下不是必需的。

答案 3 :(得分:0)

    //Iam using Custom validator 
         func validatorEmail(TF1:UITextField,errorMsg:String = validatorConstants.errorMsg ,errorMsgEmail:String = validatorConstants.emailMsg,fieldName:String = "Email" ) -> Bool {
            var error = validatorConstants.errorMsg
            if fieldName.count > 0 {
              error = validatorConstants.customMsg + fieldName
            }

            if  TF1.text?.isEmpty == true{
             // Any Notification
              return false
            }
            if  TF1.text?.isValidEmail == false{
              // Any Notification
              return false
            }
            return true
          }


  var isValidEmail: Bool {
    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
    let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
    return emailTest.evaluate(with: self)
}   

              // call  this function as
       guard validator.validators(TF1: self.txtfied,fieldName: "FirstName") == false
          else {
           return
            }