一尘不染

我可以在Swift中使用带有nil参数的NSPredicate吗?

swift

我正在尝试将使用Core Data的项目从Objective-C转换为Swift。

数据模型的结构使得我拥有一个包含其他文件夹的主文件夹-这些文件夹也可以通过“ parentFolder”关系包含其他文件夹。

当前,我在Objective-C中执行此操作以检索主文件夹(它找到唯一一个没有“ parentFolder”的文件夹,并且按预期工作):

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:"Folder"];
request.predicate = [NSPredicate predicateWithFormat:@"parentFolder == %@", nil];

在转换为Swift时,我想做同样的事情:

let request = NSFetchRequest(entityName: "Folder")
request.predicate = NSPredicate(format: "parentFolder == %@", nil)

…但是编译器抱怨调用中缺少“参数标签’argumentArray:”。(我似乎把它弄糊涂了,以为我需要使用NSPredicate(format:argumentsArray
:)方法来代替…)

在Swift中有正确的方法吗?


阅读 270

收藏
2020-07-07

共1个答案

一尘不染

看起来(使用当前的Xcode 6 beta 3版本)通常很难传递nil可变参数列表。

似乎 可行:

let predicate = NSPredicate(format: "parentFolder == %@", 0)
print(predicate)
// Output: parentFolder == nil

但是 最简单的解决方案 是将谓词写为

NSPredicate(format: "parentFolder == nil")
2020-07-07