fetchRequest()Swift 3.0,扩展不是真的有100%的帮助吗?
根据新的核心数据变化,Xcode为我生成了以下子类: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? } 但是
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
Person+CoreDataProperties
中的func名称重命名为fromfetchRequest
topersonFetchRequest
并按该名称调用,它将像这样编译
更妙的是,只需在
Person+CoreDataClass
中添加另一个具有不同名称的func,它将返回Person.fetchRequest()
,您在使用该名称调用时不需要强制转换。我理解这里提到的答案的原因,但我不明白,苹果为什么要添加非编译代码!!/rant结束
let fetchRequest: NSFetchRequest<**YourEntity**> = **YourEntity**.fetchRequest()