【问题标题】:How to combine 2 bools together in Swift 4如何在 Swift 4 中将 2 个布尔值组合在一起
【发布时间】:2019-01-14 10:48:34
【问题描述】:

我正在尝试创建一个电子邮件验证,用于验证电子邮件中字符 @ 的位置以及 @ 之前和之后的字符。我可以做到这一点,但我无法将两者结合在一起。到目前为止,我有一个计算属性,它只检查电子邮件是否包含@。我怎样才能把它结合起来检查所有条件。

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")
}

【问题讨论】:

    标签: ios swift boolean


    【解决方案1】:

    附加(布尔)子句与可选绑定用 逗号分隔:

    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
        }
    }
    

    【讨论】:

    • 非常感谢。完美运行
    【解决方案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

    但我假设你已经知道了。

    【讨论】:

    • 我不想使用正则表达式
    • 如果这件事上线,我想你应该这样做。如果您只是在沙盒中玩,您应该按照其他答案的建议让 range = self.range(of: "@") return range.lowerBound > startIndex && range.upperBound
    【解决方案3】:

    试试这个方法

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

    删除包含逻辑背后的逻辑

    如果字符串本身不包含@ 字符,那么range 将故意为nil。所以在这种情况下不需要。

    【讨论】:

      【解决方案4】:
          //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
                  }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多