"첫 스킨 십" - iOS 에서 전략 모드 초기 활용

얼마 전 프로젝트 에 서 는 입력 검증 이 비교적 많 았 고 단순 한 순수 숫자 입력 여 부 를 검증 하 는 것 도 있 었 으 며 순수 자모 입력 여 부 를 검증 하 는 것 도 있 었 으 며 복잡 한 정규 검사 검증 도 있 었 다.
가끔 작년 에 산 디자인 모델 의 책 을 뒤 져 보면 디자인 모델 인 전략 모델 을 볼 수 있다.
전략 모델 을 활용 하여 입력 검증 을 추상 화하 고 하나의 단독 클래스 로 쓰 면 필요 한 곳 에서 호출 하 는 것 이 편리 하지 않 습 니까?
다음은 실현 과정 이다.
디자인 기본 클래스
하나의 기본 클래스 를 추상 화하 고 서로 다른 검증 을 하위 클래스 로 작성 하면 모든 곳 에서 같은 인 터 페 이 스 를 호출 하여 사용자 의 복잡 도 를 크게 낮 출 수 있다.
기본 클래스 의 디자인 은 코드 를 먼저 봅 니 다.
#import <Foundation/Foundation.h>
static NSString* const InputValidationErrorDomain = @"InputValidationErrorDomain";
@interface InputValidator : NSObject

-(BOOL) validateInput:(UITextField*)input error:(NSError**)error;
@end

검증 할 대상 을 입력 하고 error 를 채 우 는 지침 을 보 여 주 는 인 스 턴 스 방법 만 제공 한 것 을 볼 수 있 습 니 다.검증 결 과 를 BOOL 형 으로 되 돌려 줍 니 다.
다시 보면 실현:
#import "InputValidator.h"

@implementation InputValidator
-(BOOL) validateInput:(UITextField *)input error:(NSError **)error{
    if (error) {
        *error=nil;
    }
    return NO;
}
@end

기 류 는 이렇게 간단 하 다.
그 다음 에 수요 에 따라 자 류 를 구체 적 으로 실현 하 는 것 이다.
2. 디자인 서브 클래스
자 류 는 우리 의 수요 에 따라 구체 적 으로 설계 하고 실현 하 는 것 이다.저 는 여기 서 두 가지 간단 한 검증 을 제공 합 니 다. 순수한 디지털 검증, 순수한 자모 검증 입 니 다.
순수 숫자의 검증 을 먼저 봅 니 다.
#import "InputValidator.h"

@interface NumericInputValidator : InputValidator

- (BOOL) validateInput:(UITextField *)input error:(NSError **)error;
@end

우리 가 기 류 를 계승 한 후에 유일한 인 스 턴 스 방법 이 필요 하 다 는 것 을 알 수 있다.다시 보기 실현:
#import "NumericInputValidator.h"

@implementation NumericInputValidator
- (BOOL) validateInput:(UITextField *)input error:(NSError **)error{
    NSError* regError = nil;
    NSRegularExpression* regex =[ NSRegularExpression regularExpressionWithPattern:@"^[0-9]*$" options:NSRegularExpressionAnchorsMatchLines error:®Error];
    
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:[input text] options:NSMatchingAnchored range:NSMakeRange(0, [[input text]length])];
    
    if (numberOfMatches==0) {
        if (error != nil) {
            NSString* description = NSLocalizedString(@"Input Validation Failed", @"");
            NSString* reason = NSLocalizedString(@"The input can contain only numerical values", @"");
            
            NSArray* objArray = [NSArray arrayWithObjects:description,reason, nil];
            NSArray* keyArray = [NSArray arrayWithObjects:NSLocalizedDescriptionKey,NSLocalizedDescriptionKey, nil];
            
            NSDictionary* userInfo = [NSDictionary dictionaryWithObjects:objArray forKeys:keyArray];
            *error = [NSError errorWithDomain:InputValidationErrorDomain code:1001 userInfo:userInfo];
        }
        return NO;
    }
    return  YES;
}
@end

실현 되 는 것 을 볼 수 있 으 면 풍만 해진 다.
알파벳 으로 검 증 된 것 을 다시 봅 니 다.
헤더 파일:
#import "InputValidator.h"

@interface AlphaInputValidator : InputValidator{
    
}
- (BOOL) validateInput:(UITextField *)input error:(NSError **)error;
@end

실현:
#import "AlphaInputValidator.h"

@implementation AlphaInputValidator
- (BOOL) validateInput:(UITextField *)input error:(NSError **)error{
    NSError* regError = nil;
    NSRegularExpression* regex =[ NSRegularExpression regularExpressionWithPattern:@"^[a-zA-Z]*$" options:NSRegularExpressionAnchorsMatchLines error:®Error];
    
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:[input text] options:NSMatchingAnchored range:NSMakeRange(0, [[input text]length])];
    
    if (numberOfMatches==0) {
        if (error != nil) {
            NSString* description = NSLocalizedString(@"Input Validation Failed", @"");
            NSString* reason = NSLocalizedString(@"The input can contain only letters", @"");
            
            NSArray* objArray = [NSArray arrayWithObjects:description,reason, nil];
            NSArray* keyArray = [NSArray arrayWithObjects:NSLocalizedDescriptionKey,NSLocalizedDescriptionKey, nil];
            
            NSDictionary* userInfo = [NSDictionary dictionaryWithObjects:objArray forKeys:keyArray];
            *error = [NSError errorWithDomain:InputValidationErrorDomain code:1002 userInfo:userInfo];
        }
        return NO;
    }
    return  YES;
}

@end

좋은 웹페이지 즐겨찾기