fetchRequest()Swift 3.0,扩展不是真的有100%的帮助吗?

fetchRequest()Swift 3.0,扩展不是真的有100%的帮助吗?,swift,core-data,Swift,Core Data,根据新的核心数据变化,Xcode为我生成了以下子类: extension Person { @nonobjc public class func fetchRequest() -> NSFetchRequest<Person> { return NSFetchRequest<Person>(entityName: "Person"); } @NSManaged public var name: String? } 但是

根据新的核心数据变化,Xcode为我生成了以下子类:

extension Person {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Person> {
        return NSFetchRequest<Person>(entityName: "Person");
    }

    @NSManaged public var name: String?

}
但是,上面这行代码给了我一个错误:

"Ambiguous use of 'fetchRequest'
这解决了问题:

let fr: NSFetchRequest<Person> = Person.fetchRequest()
让fr:NSFetchRequest=Person.fetchRequest()
那么,我很困惑什么是:

NSFetchRequest<Person>
NSFetchRequest
在:

@nonobjc public class func fetchRequest() -> NSFetchRequest<Person> {
@nonobjc公共类func fetchRequest()->NSFetchRequest{
返回类型到底在做什么

返回类型是否应该允许我不必指定:

NSFetchRequest<Person>
NSFetchRequest
在let定义中

let fr: NSFetchRequest<Person> = Person.fetchRequest()
让fr:NSFetchRequest=Person.fetchRequest()
有人能帮我理解为什么需要它,即使它已经是返回类型的一部分了吗?

因为fetchRequest()对于所有实体都是通用的,所以您可以在生成的所有扩展中看到相同的方法,您必须使其特定

下一行特定于YourEntity类获取请求方法

let fetchRequest: NSFetchRequest<**YourEntity**> = **YourEntity**.fetchRequest()
let fetchRequest:NSFetchRequest=**YourEntity**.fetchRequest()

发生这种情况的原因是在
Person
类中有两个名为
fetchRequest
的方法:

  • 首先是在模型子类(
    Person
    )中,返回类型为
    NSFetchRequest
  • 第二个在
    NSManagedObject
    中,返回类型为
    NSFetchRequest
这就是为什么它不明确的原因,编译器不知道您引用的是2个函数中的哪一个。如果您将
Person+CoreDataProperties
中的func名称重命名为from
fetchRequest
to
personFetchRequest
并按该名称调用,它将像这样编译


更妙的是,只需在
Person+CoreDataClass
中添加另一个具有不同名称的func,它将返回
Person.fetchRequest()
,您在使用该名称调用时不需要强制转换。

我理解这里提到的答案的原因,但我不明白,苹果为什么要添加非编译代码!!/rant结束
let fetchRequest: NSFetchRequest<**YourEntity**> = **YourEntity**.fetchRequest()