【发布时间】:2018-02-26 13:11:50
【问题描述】:
我正在使用 Objective-C TextFieldValidator(https://github.com/dhawaldawar/TextFieldValidator) 自定义类来验证我的应用程序中的文本字段,它具有验证正则表达式的功能:
-(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;
}
现在在我的 UIViewController 中,我正在使用以下 if 语句来验证我从注册表单中的此自定义 TextFieldValidator 继承的所有文本字段:
tfFirstName.isMandatory = true
tfLastName.isMandatory = true
if (tfFirstName.validate() && tfLastName.validate()){
return true
}else{
return false
}
tfLastName 字段为空白,但似乎 if 语句仅调用 tfFirstName.validate() 并始终返回 true,即 && 运算符在这里不起作用。 在 Objective-C && 中工作正常,但在 Swift 3 中却不是。为什么&& 操作符在这里不起作用,解决办法是什么?
【问题讨论】:
-
请分享 validate() 函数
-
minimal reproducible example 会很有帮助。
-
tfLastName.validate()只有在tfFirstName.validate()为真时才会被调用。如果对validate的两个调用都为真,则整个if只会返回真。你怎么知道没有拨打validate的电话?您确定tfLastName没有引用与tfFirstName相同的文本字段吗? -
这绝不是语言的错。它始终是您自己的代码。
-
如果
textfield.text是nil,您的验证函数会返回true——不确定这是否真的会发生,因为默认值(根据文档)是""——试试return (textfield.text?.characters.count ?? 0) > 0代替