根据新的Core Data变化,Xcode为我生成了这个子类:
extension Person {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Person> {
return NSFetchRequest<Person>(entityName: "Person");
}
@NSManaged public var name: String?
}
Run Code Online (Sandbox Code Playgroud)
然后在代码中我期待这一行工作:
let fr = Person.fetchRequest()
Run Code Online (Sandbox Code Playgroud)
但是上面这行代码给出了一个错误:
"Ambiguous use of 'fetchRequest'
Run Code Online (Sandbox Code Playgroud)
这解决了这个问题:
let fr: NSFetchRequest<Person> = Person.fetchRequest()
Run Code Online (Sandbox Code Playgroud)
那么,我很困惑的是:
NSFetchRequest<Person>
Run Code Online (Sandbox Code Playgroud)
在里面:
@nonobjc public class func fetchRequest() -> NSFetchRequest<Person> {
Run Code Online (Sandbox Code Playgroud)
返回类型在做什么?
不应该返回类型允许我不必指定:
NSFetchRequest<Person>
Run Code Online (Sandbox Code Playgroud)
在let定义??
let fr: NSFetchRequest<Person> = Person.fetchRequest()
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我理解它为什么需要它,即使它已经是返回类型的一部分了吗?
Dan*_*e P 24
发生这种情况的原因是fetchRequest您的Person类中有两种方法:
Person)中返回类型NSFetchRequest<Person>NSManagedObject返回类型NSFetchRequest<NSFetchRequestResult>这实际上是为什么它是模棱两可的,编译器不知道你指的是哪两个.如果您在重命名FUNC名Person+CoreDataProperties来自fetchRequest于personFetchRequest和这个名字叫-它会编译就是这样.
甚至更好 - 只需添加另一个func,Person+CoreDataClass使用不同的名称,这将返回Person.fetchRequest(),并且您在调用该名称时不需要进行强制转换.
Dev*_*esh 18
由于fetchRequest()对于所有实体都是通用的,因此您可以在所有生成的扩展中看到相同的方法,您必须使其具体化.
下面的行特定于YourEntity类获取请求方法
let fetchRequest: NSFetchRequest<**YourEntity**> = **YourEntity**.fetchRequest()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4730 次 |
| 最近记录: |