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

extension Person {

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

    @NSManaged public var name: String?

}

然后在代码中,我希望这一行可以工作:

let fr = Person.fetchRequest()

然而,上面这行代码给了我一个错误:

"Ambiguous use of 'fetchRequest'

这解决了问题:

let fr: NSFetchRequest<Person> = Person.fetchRequest()

那么,我很困惑什么是:

NSFetchRequest<Person>

在:

@nonobjc public class func fetchRequest() -> NSFetchRequest<Person> {

返回类型到底在做什么?

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

NSFetchRequest<Person>

在let定义中??

let fr: NSFetchRequest<Person> = Person.fetchRequest()

有人能帮我理解为什么需要它,尽管它已经是返回类型的一部分了吗?

推荐答案

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

  • 首先是在返回类型为NSFetchRequest<Person>的模型子类(Person)中
  • 第二种是NSManagedObject英寸,返回类型为NSFetchRequest<NSFetchRequestResult>

这就是为什么它是不明确的,编译器不知道你指的是哪一个.如果你在Person+CoreDataProperties中把func的名字从fetchRequest改为personFetchRequest,然后用这个名字来调用,它就会像这样编译.

更好的是,只需在你的Person+CoreDataClass中添加另一个func,并使用不同的名称,返回Person.fetchRequest(),在使用该名称调用时,你不需要强制转换.

Swift相关问答推荐

纹理资源加载问题(图像解码失败)

在解码字符串时需要帮助.

如何在AudioKit中实现自定义音效 node ?

如何让ScrollView缩小到合适的大小,并在没有黑客攻击的情况下占用最小空间

为什么要在SWIFT RandomAccessCollection协议中重新定义元素类型?

在 SwiftUI 视图中观察 UIViewRepresentable 的 @State var 变化

Swift计时器未触发

如何在SwiftUI中更改NSTextView中的 Select colored颜色 ?

允许为 self 分配新的 struct 值的理由是什么?

SwiftUI 无法在实时活动中显示 SpriteView

解码 JSON 时 Swift Struct Decoder 初始化程序错误

为什么 performSegue() 不调用 shouldPerformSegue()

试图同时实现两个混合过渡

在 Select 器上显示alert Select SwiftUI

单元测试和私有变量

仅在 Swift 中创建 Setter

Swift 动画 WithDuration 语法是什么?

'#selector' 的参数不引用 '@objc' 方法、属性或初始化程序

CMutablePointer - 如何访问它?

来自 ObservableObject 的绑定值