二元运算符'&'不能应用于两个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值,对此有任何想法吗?
答案 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()
是一个类函数,您可以使用类名直接访问它。