[iphone] Core Data에 BOOL 술어를 작성하는 방법은 무엇입니까?

유형의 속성 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))


답변