一尘不染

如何将类型应用于NSFetchRequest实例?

swift

在Swift 2中,以下代码正在运行:

let request = NSFetchRequest(entityName: String)

但是在Swift 3中它给出了错误:

无法推断出通用参数“ ResultType”

因为NSFetchRequest现在是通用类型。他们在文件中写道:

let request: NSFetchRequest<Animal> = Animal.fetchRequest

因此,例如,如果我的结果类是Level我应该如何正确请求?

因为这不起作用:

let request: NSFetchRequest<Level> = Level.fetchRequest

阅读 281

收藏
2020-07-07

共1个答案

一尘不染

let request: NSFetchRequest<NSFetchRequestResult> = Level.fetchRequest()

要么

let request: NSFetchRequest<Level> = Level.fetchRequest()

根据您想要的版本。

您必须指定泛型类型,因为否则方法调用是不明确的。

第一个版本是为定义的NSManagedObject,第二个版本是使用扩展名自动为每个对象生成的,例如:

extension Level {
    @nonobjc class func fetchRequest() -> NSFetchRequest<Level> {
        return NSFetchRequest<Level>(entityName: "Level");
    }

    @NSManaged var timeStamp: NSDate?
}

重点是删除String常量的用法。

2020-07-07