gpt4 book ai didi

ios - 创建自定义核心数据类以子类化 MKAnnotation?

转载 作者:行者123 更新时间:2023-11-28 15:24:17 26 4
gpt4 key购买 nike

我正在尝试将 MKAnnotations 保存到我正在学习的类(class)中的项目的核心数据中。

我查看了 github 上其他学生的代码,他们都采用相同的方法创建自定义 NSManagedObject 类,该类是 MKAnnotation 的子类。

var coordinate: CLLocationCoordinate2D {
set {
...
}
get {
...
}
}

override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) {
super.init(entity: entity, insertIntoManagedObjectContext: context)
}

init(latitude: Double, longitude: Double, context: NSManagedObjectContext) {

super.init(entity: entity!, insertIntoManagedObjectContext: context)
self.lat = ....
}

我不明白 super.inits。

MKAnnotation 需要一个坐标变量来解释第一组代码,所以这是有道理的。

在第二和第三段代码中,覆盖 init 并调用 super.init 的目的是什么? github 上的每个示例都有与此非常相似的代码,所以这是解决这个问题的唯一方法吗?为什么一定要这样做?

最佳答案

首先,MKAnnotation 是一个协议(protocol),而不是一个类。您不能子类化两个不同的类,但您可以拥有一个采用任意多协议(protocol)的子类。但这与您的类(class)没有直接关系。

super.init 调用的原因与 Core Data 没有直接关系。它更多的是关于 Swift 初始化。每个类都有至少一个“指定的”初始值设定项。 Swift 要求这些类调用它们父类(super class)的指定初始化器。 NSManagedObject 的指定初始化程序是 init(entity:, insertIntoManagedObjectContext:),因此任何子类必须调用它来完成初始化。

当谈到类继承时,Swift 的初始化规则还有很多。您可能想查看 Apple's documentation on the subject如果您的类(class)中没有涵盖它。

关于ios - 创建自定义核心数据类以子类化 MKAnnotation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45491253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com