在Swift 2中,以下代码正在工作:
let request = NSFetchRequest(entityName: String)
但在Swift 3它给出错误:
Generic parameter “ResultType” could not be inferred
因为NSFetchRequest现在是一个通用类型。在他们的文件中,他们写道:
let request: NSFetchRequest<Animal> = Animal.fetchRequest
所以如果我的结果类是例如级别我应该如何正确请求?
因为这不工作:
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? }
整个关键是要去掉String常量的用法。