为什么我在swift 3.0中收到此错误

时间:2017-09-21 07:13:29

标签: swift

  

二元运算符'&'不能应用于两个bool操作数

我在这里分享我的代码。

@IBOutlet weak var fnameTxt: UITextField!
@IBOutlet weak var lnameTxt: UITextField!
@IBOutlet weak var addrsTxt: UITextField!

if (fnameTxt.validate()) & (lnameTxt.validate()) & (addrsTxt.validate()){
 print("successfully validated")
}else{
 print("validation failed")
}

-(BOOL)validate{
    if(isMandatory){
        if([self.text length]==0){
            [self showErrorIconForMsg:strLengthValidationMsg];
            return NO;
        }
    }
    for (int i=0; i<[arrRegx count]; i++) {
        NSDictionary *dic=[arrRegx objectAtIndex:i];
        if([dic objectForKey:@"confirm"]){
            TextFieldValidator *txtConfirm=[dic objectForKey:@"confirm"];
            if(![txtConfirm.text isEqualToString:self.text]){
                [self showErrorIconForMsg:[dic objectForKey:@"msg"]];
                return NO;
            }
        }else if(![[dic objectForKey:@"regx"] isEqualToString:@""] && [self.text length]!=0 && ![self validateString:self.text withRegex:[dic objectForKey:@"regx"]]){
            [self showErrorIconForMsg:[dic objectForKey:@"msg"]];
            return NO;
        }
    }
    self.rightView=nil;
    return YES;
}

这里,validate()返回boolean值,对此有任何想法吗?

3 个答案:

答案 0 :(得分:2)

单个&符号('&amp;')用于执行按位运算。从您提出的问题来看,似乎您打算使用逻辑AND运算符('&amp;&amp;')。因此,将&替换为&&,如

if (fnameTxt.validate()) && (lnameTxt.validate()) && (addrsTxt.validate()){
 print("successfully validated")
}else{
 print("validation failed")
}

答案 1 :(得分:1)

请使用&amp;&amp; 代替&amp; 。 即,

if ((fnameTxt.validate()) && (lnameTxt.validate()) && (addrsTxt.validate())){
 print("successfully validated")
}else{
 print("validation failed")
}

答案 2 :(得分:1)

  

您不能使用按位运算符来比较两个操作数,如果要进行比较,则应使用逻辑运算符。因此,而不是&使用&&

另外,我想建议你:

由于您的所有validate()都有一个共同的UITextField功能,我建议你制作一个这样的功能签名。

class func validates(textFields: Array<UITextField>) -> Bool {
    //Return true or false based on the validation.
    textFields.forEach { (textField) in {
        //do something with each of the textField in textFields array.
    }
}

通过这种方式,你可以简单地检查一下

if UITextField.validates([fnameTxt, lnameTxt, addrsTxt]) {
    //Go ahead!
} else {
   //Handle the invalidation.
}

注意:由于validates()是一个类函数,您可以使用类名直接访问它。