수색…
통사론
- 술어 형식 문자열 배열
- C 형식 문자열 지정자 : % d, % s, % f 등
- 개체 대체 : % @
- 키 패스 대체 : % K
- 술어 비교 연산자
- =, == : 왼손 표현식은 오른쪽 표현식과 같습니다.
- > =, => : 왼쪽 표현식이 오른쪽 표현식보다 크거나 같음
- <=, = <: 왼쪽 표현식이 오른쪽 표현식보다 작거나 같습니다.
- > : 왼쪽 표현식이 오른쪽 표현식보다 큽니다.
- <: 왼쪽 표현식이 오른쪽 표현식보다 작습니다.
- ! =, <> : 왼쪽 표현식이 오른쪽 표현식과 동일하지 않습니다.
- BETWEEN : 왼쪽 표현식은 오른쪽 표현식의 값 중 하한값과 상한값을 지정합니다. 예 : BETWEEN {0, 5}
- 조건부 복합 연산자
- AND, && : 논리적 AND
- OR, || : 논리 OR
- NOT,! : 논리적 NOT
- 술어 문자열 비교 연산자
- BEGINSWITH : 왼손 표현은 오른쪽 표현으로 시작됩니다.
- ENDSWITH : 왼손 표현은 오른쪽 표현으로 끝납니다.
- CONTAINS : 왼손 수식은 오른쪽 수식을 포함합니다.
- LIKE : 왼손 표현식은 오른쪽 표현식과 동일하며 와일드 카드 대체와 같습니다.
- * : 0 문자 이상 일치
- ? : 한 문자와 일치
predicateWithBlock을 사용하여 NSPredicate 만들기
목표 -C
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id item,
NSDictionary *bindings) {
return [item isKindOfClass:[UILabel class]];
}];
빠른
let predicate = NSPredicate { (item, bindings) -> Bool in
return item.isKindOfClass(UILabel.self)
}
이 예에서 술어는 UILabel
클래스의 항목과 일치합니다.
predicateWithFormat을 사용하여 NSPredicate 만들기
목표 -C
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"self[SIZE] = %d", 5)];
빠른
let predicate = NSPredicate(format: "self[SIZE] >= %d", 5)
이 예에서, 술어는 길이가 적어도 5 인 항목 인 항목과 일!합니다.
대입 변수를 사용하여 NSPredicate 만들기
NSPredicate
는 대체 변수를 사용하여 값을 즉시 바인딩 할 수 있습니다.
목표 -C
NSPredicate *template = [NSPredicate predicateWithFormat: @"self BEGINSWITH $letter"];
NSDictionary *variables = @{ @"letter": @"r" };
NSPredicate *beginsWithR = [template predicateWithSubstitutionVariables: variables];
빠른
let template = NSPredicate(format: "self BEGINSWITH $letter")
let variables = ["letter": "r"]
let beginsWithR = template.predicateWithSubstitutionVariables(variables)
템플릿 술어에 의해 수정되지 않습니다 predicateWithSubstitutionVariables
. 대신 복사본이 만들어지고 해당 복사본은 대체 변수를받습니다.
NSPredicate를 사용하여 배열 필터링
목표 -C
NSArray *heroes = @[@"tracer", @"bastion", @"reaper", @"junkrat", @"roadhog"];
NSPredicate *template = [NSPredicate predicateWithFormat:@"self BEGINSWITH $letter"];
NSDictionary *beginsWithRVariables = @{ @"letter": @"r"};
NSPredicate *beginsWithR = [template predicateWithSubstitutionVariables: beginsWithRVariables];
NSArray *beginsWithRHeroes = [heroes filteredArrayUsingPredicate: beginsWithR];
// ["reaper", "roadhog"]
NSDictionary *beginsWithTVariables = @{ @"letter": @"t"};
NSPredicate *beginsWithT = [template predicateWithSubstitutionVarables: beginsWithTVariables];
NSArray *beginsWithTHeroes = [heroes filteredArrayUsingPredicate: beginsWithT];
// ["tracer"]
빠른
let heroes = ["tracer", "bastion", "reaper", "junkrat", "roadhog"]
let template = NSPredicate(format: "self BEGINSWITH $letter")
let beginsWithRVariables = ["letter": "r"]
let beginsWithR = template.predicateWithSubstitutionVariables(beginsWithRVariables)
let beginsWithRHeroes = heroes.filter { beginsWithR.evaluateWithObject($0) }
// ["reaper", "roadhog"]
let beginsWithTVariables = ["letter": "t"]
let beginsWithT = template.predicateWithSubstitutionVariables(beginsWithTVariables)
let beginsWithTHeroes = heroes.filter { beginsWithT.evaluateWithObject($0) }
// ["tracer"]
NSPredicate를 사용한 양식 유효성 검사
NSString *emailRegex = @"[A-Z0-9a-z]([A-Z0-9a-z._-]{0,64})+[A-Z0-9a-z]+@[A-Z0-9a-z]+([A-Za-z0-9.-]{0,64})+([A-Z0-9a-z])+\\.[A-Za-z]{2,4}"; NSString *firstNameRegex = @"[0-9A-Za-z\"'-]{2,32}$";
NSString *firstNameRegex = @"[ 0-9A-Za-z]{2,32}$";
NSString *lastNameRegex = @"[0-9A-Za-z\"'-]{2,32}$";
NSString *mobileNumberRegEx = @"^[0-9]{10}$";
NSString *zipcodeRegEx = @"^[0-9]{5}$";
NSString *SSNRegEx = @"^\\d{3}-?\\d{2}-?\\d{4}$";
NSString *addressRegEx = @"^[ A-Za-z0-9]{2,32}$";
NSString *cityRegEx = @"^[ A-Za-z0-9]{2,25}$";
NSString *PINRegEx = @"^[0-9]{4}$";
NSString *driversLiscRegEx = @"^[0-9a-zA-Z]{5,20}$";
-(BOOL)validateEmail {
//Email address field should give an error when the email address begins with ".","-","_" .
NSPredicate *emailPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return ([emailPredicate evaluateWithObject:self.text] && self.text.length <= 64 && ([self.text rangeOfString:@".."].location == NSNotFound));
}
- (BOOL)validateFirstName {
NSPredicate *firstNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", firstNameRegex];
return [firstNamePredicate evaluateWithObject:self.text];
}
- (BOOL)validateLastName {
NSPredicate *lastNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", lastNameRegex];
return [lastNamePredicate evaluateWithObject:self.text];
}
- (BOOL)validateAlphaNumericMin2Max32 {
NSPredicate *firstNamePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", firstNameRegex];
return [firstNamePredicate evaluateWithObject:self.text];
}
- (BOOL)validateMobileNumber {
NSString *strippedMobileNumber = [[[[self.text stringByReplacingOccurrencesOfString:@"(" withString:@""]
stringByReplacingOccurrencesOfString:@")" withString:@""]
stringByReplacingOccurrencesOfString:@"-" withString:@""]
stringByReplacingOccurrencesOfString:@" " withString:@""];
NSPredicate *mobileNumberPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", mobileNumberRegEx];
return [mobileNumberPredicate evaluateWithObject:strippedMobileNumber];
}
- (BOOL)validateZipcode {
NSPredicate *zipcodePredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", zipcodeRegEx];
return [zipcodePredicate evaluateWithObject:self.text];
}
- (BOOL)validateSSN {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", SSNRegEx];
return [predicate evaluateWithObject:self.text];
}
- (BOOL)validateAddress {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", addressRegEx];
return [predicate evaluateWithObject:self.text];
}
- (BOOL)validateCity {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", cityRegEx];
return [predicate evaluateWithObject:self.text];
}
- (BOOL)validatePIN {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", PINRegEx];
return [predicate evaluateWithObject:self.text];
}
- (BOOL)validateDriversLiscNumber {
if([self.text length] > 20) {
return NO;
}
NSPredicate *driversLiscPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", driversLiscRegEx];
return [driversLiscPredicate evaluateWithObject:self.text];
}
`AND`,`OR` 및`NOT` 조건을 가진 NSPredicate
조건부 조건부는 주어진 조건부에 대한 기본 부울 연산자를 제공하는 NSCompoundPredicate
클래스를 사용하여보다 NSCompoundPredicate
하고 안전합니다.
목표 -C
AND - 조건
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"samplePredicate"];
NSPredicate *anotherPredicate = [NSPredicate predicateWithFormat:@"anotherPredicate"];
NSPredicate *combinedPredicate = [NSCompoundPredicate andPredicateWithSubpredicates: @[predicate,anotherPredicate]];
또는 - 조건
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"samplePredicate"];
NSPredicate *anotherPredicate = [NSPredicate predicateWithFormat:@"anotherPredicate"];
NSPredicate *combinedPredicate = [NSCompoundPredicate orPredicateWithSubpredicates: @[predicate,anotherPredicate]];
NOT - 조건
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"samplePredicate"];
NSPredicate *anotherPredicate = [NSPredicate predicateWithFormat:@"anotherPredicate"];
NSPredicate *combinedPredicate = [NSCompoundPredicate notPredicateWithSubpredicate: @[predicate,anotherPredicate]];
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow