在Swift 2中,以下代码起作用:

let request = NSFetchRequest(entityName: String)

但在Swift 3中它给出了错误:
无法推断泛型参数“ResultType”
因为NSFetchRequest现在是泛型类型。他们在文件中写道:
let request: NSFetchRequest<Animal> = Animal.fetchRequest

因此,如果我的结果类是例如Level我应该如何正确请求?
因为这不起作用:
let request: NSFetchRequest<Level> = Level.fetchRequest

最佳答案

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?
}

整个要点是删除字符串常量的用法。

08-27 19:20
查看更多