2017-09-21 1 views
-5

Binäroperators ‚&‘ auf zwei Bool-Operanden werden nichtWarum ich diesen Fehler in schnellen 3,0

Hier wendete ich meinen Code bin zu teilen.

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

Hier gibt validate() booleschen Wert zurück, irgendeine Idee auf diesem ??

+5

Ersetzen Sie '&' mit '&&' –

+0

sehen Sie dies für zB https://stackoverflow.com/questions/44154040/binary-operator-cannot-be-appt-to-two-bool-operands-in-swift –

+0

@Jon Snow Wenn ich && ersetze, werden nicht alle drei eingegebenen Textfelder überprüft. Ich möchte zu einem Zeitpunkt drei validieren – Nagaraju

Antwort

1

Bitte benutzen & & statt &. heißt,

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

Hallo Karthik, wenn ich && verwenden, ist es eine nach der anderen Validierung . d. h. "fnameTxt" wird validiert, nur dann, wenn "lnameTxt" geprüft wird. Ich möchte 3 auf einmal validieren. – Nagaraju

+0

Wir können nicht gleichzeitig alle Validierungs-Sachen zusammen machen. Ich denke du hast drei Textfelder und einen Knopf. Wenn Sie die Schaltfläche nach der Validierung aller drei Textfelder aktivieren (dh alle Felder sind Pflichtfelder), reicht der obige Code aus. Wenn Sie eine Fehlermeldung oder einen roten Rahmen um das Textfeld anzeigen, um den Benutzer über die Validierung zu informieren. Dann können Sie Textfelder Textchange Ereignisse verwenden und den gewünschten Code setzen dort (siehe den Link https://stackoverflow.com/questions/28394933/how-do-i-check-when-a-uitextfield-changes) – dmp

2

Ein einzelnes Zeichen ('&') ist für bitweise Operationen zu tun. Aus der Frage, die Sie gestellt haben, scheint es, als wollten Sie den logischen Operator AND verwenden ('& &'). So ersetzen & mit && wie

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

Gute Erklärung. – Hemang

+0

@Hemang danke mann –

+0

@Aravind, ich versuchte mit && auch, wenn ich && verwende, es nacheinander validieren. d. h. "fnameTxt" wird validiert, nur dann, wenn "lnameTxt" geprüft wird. Ich möchte 3 gleichzeitig bestätigen. – Nagaraju

1

Sie können nicht bitweise Operatoren verwenden zwei Operanden zu vergleichen, wenn Sie vergleichen möchten, sollten Sie logische Operatoren verwenden. Also statt &&& verwenden.

Außerdem würde Ich mag Ihnen vorschlagen:

Wie Sie eine gemeinsame validate() Funktion für alle Ihre UITextField s haben würde ich Ihnen eine Funktion Signatur wie diese machen vorschlagen.

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

Auf diese Weise können Sie einfach prüfen, wie diese

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

Hinweis: Da validates() eine Klasse-Funktion ist direkt mit dem Klassennamen zugreifen können.