유형의 속성 BOOL
이 있고이 속성이 인 모든 관리 개체에 대해 검색을 수행하려고합니다 YES
.
문자열 속성의 경우 간단합니다. 다음과 같은 조건자를 만듭니다.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
그러나 selected 라는 bool 속성 이 있고 이에 대한 술어를 만들고 싶다면 어떻게해야합니까? 그냥 이렇게해도 될까요?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
아니면 다른 형식 지정자가 필요하고 그냥 통과 YES
합니까?
답변
에서 술어 프로그래밍 가이드 :
다음 예에 설명 된대로 부울 값이 같은지 지정하고 테스트합니다.
NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"anAttribute == %@", [NSNumber numberWithBool:aBool]];
NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"anAttribute == YES"];
Predicate Format String Syntax를 확인할 수도 있습니다 .
답변
스위프트 4.0
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
답변
NSNumber로 변환하거나 이중 “==”를 사용하지 마십시오.
Swift> = 4에 더 적합합니다.
NSPredicate(format: "boolAttribute = %d", true)
참고 :이 예에서 “true”는 Bool (Struct)입니다.
답변
스위프트 3
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
Swift 3에서는 다음을 사용해야합니다. NSNumber(value: true)
.
사용 NSNumber(booleanLiteral: true)
하고 일반적으로 어떤 문자 initialiser 직접 낙담하고 예를 들어 SwiftLint는 (V 0.16.1.) 사용에 대한 경고를 생성합니다 ExpressibleBy...Literal
직접 initialiser :
컴파일러 프로토콜 초기화 위반 : 컴파일러 프로토콜에 선언 된 이니셜 라이저는
ExpressibleByArrayLiteral
직접 호출해서는 안됩니다. (컴파일러 _ 프로토콜 _init)
답변
스위프트 4
request.predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
스위프트 3
request.predicate = NSPredicate(format: "field = %@", value as CVarArg)
답변
Swift 3.0 은 다음과 같이 약간 변경되었습니다.
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(booleanLiteral: true))