初始化层次结构:需要帮助理解 self.init 以及它如何指向超级 class
Initializer Hierarchy: Need help understanding self.init and how it points to a super class
我正在尝试了解初始化器的语法及其工作原理。我正在阅读 swift 文档,但我很难理解它们在我正在处理的特定示例中的工作方式。我正在按照教程学习核心数据,但在了解初始化代码的工作原理(或我不了解的任何其他概念)之前,我不想继续完成该项目。
https://docs.swift.org/swift-book/LanguageGuide/Initialization.html
Core Data: Note Entity Class
Core Data: Note Class Convenience Initializer
在上面的第一张图片中,我显示了 Core Data 创建的注释实体 Class,在第二张图片中,我添加了一个 convenience init()。注释class扩展中代码的所有额外内容都是我的注释。
注释class 扩展的前两个评论是我发现实体class 层次结构,即超级class 是NSMangedObject (super class) 那么子 class 就是 Note 实体 class。据我了解,NSMangedObject class 有 3 个初始化器,它们是:
- init() - 默认初始化程序
- init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) - 指定初始化器
- 便利初始化(上下文 moc:NSManagedObjectContext) - 便利初始化程序
然后注意实体 class 我唯一拥有的是 便利的 init(title: String, context: NSManagedObjectContext)。对于这个初始化程序,我了解 title 和 creationDate 是如何初始化的,但我的问题是关于 self.init(context: context).
问题:据我阅读 Swift 文档的理解,便利初始值设定项不能指向另一个便利初始值设定项,我认为这是在这里发生的事情?我认为 Note class 中的默认初始化器指向 NSMangedObject 的超级 class 中的初始化器。谁能给我提供一些见解以了解正在发生的事情。
便捷初始化程序必须调用 self
中的另一个初始化程序。即 all 是必须要做的。在出于任何其他目的说 self
之前,它必须这样做。
在 Node 扩展中,便利初始化器就是这样做的;它通过调用 self.init(context:)
.
开始
这是合法的,因为 Node 是一个 NSManagedObject 子类(代表一个实体),所以它继承了那个初始化器:
https://developer.apple.com/documentation/coredata/nsmanagedobject/1640602-init
这就是所有要知道的。 init(context:)
是一个便利初始化器这一事实并不有趣。它是 self
的初始值设定项,这才是最重要的。
我正在尝试了解初始化器的语法及其工作原理。我正在阅读 swift 文档,但我很难理解它们在我正在处理的特定示例中的工作方式。我正在按照教程学习核心数据,但在了解初始化代码的工作原理(或我不了解的任何其他概念)之前,我不想继续完成该项目。
https://docs.swift.org/swift-book/LanguageGuide/Initialization.html
Core Data: Note Entity Class
Core Data: Note Class Convenience Initializer
在上面的第一张图片中,我显示了 Core Data 创建的注释实体 Class,在第二张图片中,我添加了一个 convenience init()。注释class扩展中代码的所有额外内容都是我的注释。
注释class 扩展的前两个评论是我发现实体class 层次结构,即超级class 是NSMangedObject (super class) 那么子 class 就是 Note 实体 class。据我了解,NSMangedObject class 有 3 个初始化器,它们是:
- init() - 默认初始化程序
- init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) - 指定初始化器
- 便利初始化(上下文 moc:NSManagedObjectContext) - 便利初始化程序
然后注意实体 class 我唯一拥有的是 便利的 init(title: String, context: NSManagedObjectContext)。对于这个初始化程序,我了解 title 和 creationDate 是如何初始化的,但我的问题是关于 self.init(context: context).
问题:据我阅读 Swift 文档的理解,便利初始值设定项不能指向另一个便利初始值设定项,我认为这是在这里发生的事情?我认为 Note class 中的默认初始化器指向 NSMangedObject 的超级 class 中的初始化器。谁能给我提供一些见解以了解正在发生的事情。
便捷初始化程序必须调用
self
中的另一个初始化程序。即 all 是必须要做的。在出于任何其他目的说self
之前,它必须这样做。在 Node 扩展中,便利初始化器就是这样做的;它通过调用
开始self.init(context:)
.这是合法的,因为 Node 是一个 NSManagedObject 子类(代表一个实体),所以它继承了那个初始化器:
https://developer.apple.com/documentation/coredata/nsmanagedobject/1640602-init
这就是所有要知道的。 init(context:)
是一个便利初始化器这一事实并不有趣。它是 self
的初始值设定项,这才是最重要的。