在Swift 2中,以下代码正在运行:
let request = NSFetchRequest(entityName: String)
但是在Swift 3中它给出了错误:
无法推断出通用参数“ ResultType”
因为NSFetchRequest现在是通用类型。他们在文件中写道:
NSFetchRequest
let request: NSFetchRequest<Animal> = Animal.fetchRequest
因此,例如,如果我的结果类是Level我应该如何正确请求?
Level
因为这不起作用:
let request: NSFetchRequest<Level> = Level.fetchRequest
let request: NSFetchRequest<NSFetchRequestResult> = Level.fetchRequest()
要么
let request: NSFetchRequest<Level> = Level.fetchRequest()
根据您想要的版本。
您必须指定泛型类型,因为否则方法调用是不明确的。
第一个版本是为定义的NSManagedObject,第二个版本是使用扩展名自动为每个对象生成的,例如:
NSManagedObject
extension Level { @nonobjc class func fetchRequest() -> NSFetchRequest<Level> { return NSFetchRequest<Level>(entityName: "Level"); } @NSManaged var timeStamp: NSDate? }
重点是删除String常量的用法。