如何在Core Data中编写一个BOOL谓词?
我有一个BOOL
types的属性,我想执行search所有这个属性是YES
托pipe对象。
对于string属性很简单。 我创build一个这样的谓词:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
但是,如果我有一个名为selected的bool属性,我该如何做到这一点,我想做一个谓词呢? 我可以做这样的事吗?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
或者我需要其他格式说明符,只是通过YES
?
从Predicate编程指南 :
您可以指定并testing布尔值是否相等,如以下示例所示:
NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"anAttribute == %@", [NSNumber numberWithBool:aBool]]; NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"anAttribute == YES"];
您也可以检查出谓词格式string语法 。
Swift 4.0
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
Swift 3
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
在Swift 3中,你应该使用NSNumber(value: true)
。
使用NSNumber(booleanLiteral: true)
,通常不鼓励直接使用任何字面初始化,例如SwiftLint (v。0.16.1)将直接生成使用ExpressibleBy...Literal
initialiser的警告:
编译器协议初始化违例:不应直接调用在
ExpressibleByArrayLiteral
等编译器协议中声明的初始化器。 (compiler_protocol_init)
Swift 3.0对此做了一个小小的改动:
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(booleanLiteral: true))