如何在Core Data中编写BOOL谓词?
我有一个 BOOL
类型的属性,并且我想搜索该属性为 YES
的所有托管对象。
对于字符串属性来说,这很简单。我创建了一个像这样的谓词:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
但是,如果我有一个名为 selected 的 bool 属性并且我想为此创建一个谓词,我该怎么做呢?我可以做这样的事情吗?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
或者我是否需要其他格式说明符并只需传递 YES
?
I have an attribute of type BOOL
and I want to perform a search for all managed objects where this attribute is YES
.
For string attributes it is straightforward. I create a predicate like this:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
But how do I do this, if I have a bool attribute called selected and I want to make a predicate for this? Could I just do something like this?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
Or do I need other format specifiers and just pass YES
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
来自 谓词编程指南:
您可以指定并测试布尔值是否相等,如以下示例所示:
您还可以查看 谓词格式化字符串语法。
From Predicate Programming Guide:
You specify and test for equality of Boolean values as illustrated in the following examples:
You can also check out the Predicate Format String Syntax.
斯威夫特4.0
Swift 4.0
不要转换为 NSNumber,也不要使用双“==”
更适合 Swift >= 4:
注意:本例中的“true”是一个 Bool(a结构)
Don't convert to NSNumber, nor use double "=="
More appropriate for Swift >= 4:
Note: "true" in this example is a Bool (a Struct)
Swift 3
在 Swift 3 中,您应该使用
NSNumber(value: true)
。不鼓励使用 NSNumber(booleanLiteral: true) 以及一般情况下直接使用任何文字初始化程序,例如 SwiftLint (v. 0.16.1) 将直接生成使用
ExpressibleBy...Literal
初始化程序的警告:Swift 3
In Swift 3 you should use
NSNumber(value: true)
.Using
NSNumber(booleanLiteral: true)
and in general any literal initialiser directly is discouraged and for example SwiftLint (v. 0.16.1) will generate warning for usageExpressibleBy...Literal
initialiser directly:斯威夫特 4
斯威夫特 3
Swift 4
Swift 3
Swift 3.0对此做了一些细微的改变:
Swift 3.0 has made a slight change to this:
如果您不想在格式中硬编码属性名称,您可以使用
#keyPath
,例如:if you do not want to hard-code the attribute name inside the format you can use
#keyPath
with something like,