【发布时间】:2019-11-26 23:49:27
【问题描述】:
我正在用 Swift 编写代码,并使用 https://github.com/evermeer/EVReflection。然而,Xcode 正在用我的类结构玩恶作剧——在一些地方,它声称我需要包含一个必需的初始化,在EVObject 中声明,但在其他地方不需要。考虑以下示例:
class Root: EVObject {
}
class MidA: Root {
required init() {
}
init(blah: String) {
}
}
class LeafA: MidA {
required init() {
super.init()
}
} // Error: 'required' initializer 'init(coder:)' must be provided by subclass of 'EVObject'
class MidB: Root {
required init() {
}
}
class LeafB: MidB {
required init() {
super.init()
}
} // No error
EVObject 包含以下方法定义:
public convenience required init?(coder: NSCoder) {
self.init()
EVReflection.decodeObjectWithCoder(self, aDecoder: coder, conversionOptions: .DefaultNSCoding)
}
用文字来描述这个例子,有一个根对象Root,它扩展了EVObject,它分叉成两个子类MidA和MidB,每个子类都有自己的子类:@987654330 @ 和 LeafB。 LeafA 和 LeafB 除了名称和超类之外是相同的。 MidA 和 MidB 仅在名称上有所不同,MidA 有一个额外的初始化器,它接受一个参数。
这可能对LeafA 有什么影响?有一个带有参数的额外初始化程序似乎与EVObject 中声明的特定初始化程序完全无关(显然是required,但通常不强制执行??)。为什么在分支类中添加不相关的初始化会突然要求我在叶类中弄清楚我以前从未见过的 required 初始化器到底是什么?
【问题讨论】:
标签: swift initializer