"첫 스킨 십" - 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.