在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常量的用法。