iOS应用运用设计模式中的Strategy策略模式的开发实例

2020-01-14 22:14:28刘景俊

     
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:input.text options:NSMatchingAnchored range:NSMakeRange(0, input.text.length)];
    // 如果没有匹配,就会错误和NO.
    if (numberOfMatches == 0) {
        if (error != nil) {
            // 先判断error对象是存在的
            NSString *description = NSLocalizedString(@"验证失败", @"");
            NSString *reason = NSLocalizedString(@"输入仅能包含数字", @"");
            NSArray *objArray = [NSArray arrayWithObjects:description, reason, nil];
            NSArray *keyArray = [NSArray arrayWithObjects:NSLocalizedDescriptionKey, NSLocalizedFailureReasonErrorKey, nil];
             
            NSDictionary *userInfo = [NSDictionary dictionaryWithObjects:objArray forKeys:keyArray];
            //错误被关联到定制的错误代码1001和在InputValidator的头文件中。
            *error = [NSError errorWithDomain:InputValidationErrorDomain code:1001 userInfo:userInfo]; 
        }
         
        return NO;
    }
     
    return YES;
}
 
@end
    现在,我们来编写字母验证的实现,代码如下:

 

    AlphaInputValidator.h中AlphaInputValidator的类定义

复制代码
#import "InputValidator.h"
@interface AlphaInputValidator : InputValidator
 
- (BOOL)validateInput:(UITextField *)input error:(NSError *__autoreleasing *)error;
 
@end
    AlphaInputValidator.m中AlphaInputValidator的实现:

 

#import "AlphaInputValidator.h"
 

复制代码
@implementation AlphaInputValidator
 
- (BOOL)validateInput:(UITextField *)input error:(NSError *__autoreleasing *)error {