我有一个BOOL
类型的属性,我想搜索所有这个属性为YES
的托管对象。
对于字符串属性,它很简单。我创建一个这样的谓词:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
但是我该如何做,如果我有一个名为selected的bool属性,我想为此做一个谓词?我可以这样做吗?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
或者我需要其他格式说明符,只需通过YES
?
来自Predicate Programming Guide:
您可以指定并测试布尔值的相等性,如以下示例所示:
NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"anAttribute == %@", [NSNumber numberWithBool:aBool]];
NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"anAttribute == YES"];
Swift 4.0
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
斯威夫特3
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
在Swift 3中你应该使用NSNumber(value: true)
。
使用NSNumber(booleanLiteral: true)
并且通常不鼓励使用任何文字初始化器,例如SwiftLint(v。0.16.1)将直接生成使用ExpressibleBy...Literal
初始化器的警告:
编译器协议初始化违规:不应直接调用在编译器协议(如
ExpressibleByArrayLiteral
)中声明的初始化器。 (compiler_protocol_init)
不要转换为NSNumber,也不要使用双“==”
更适合Swift 4:
NSPredicate(format: "boolAttribute = %d", true)
注意:此示例中的“true”是Bool(一个Struct)
斯威夫特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))