在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?
}
整个要点是删除字符串常量的用法。