【发布时间】:2018-09-30 15:51:59
【问题描述】:
我有一个类层次结构,其中 ClassB 继承自 ClassA
静态变量solitaire在ClassA上定义
static var solitaire: ClassA!
类函数createdSolitaire()定义在ClassA上
class func createSolitaire() {
solitaire = self.init()
}
当我调用ClassB.createSolitaire() 时,var solitaire 被设置为ClassA 的实例,而不是ClassB。
我在这里做错了什么?谢谢。
代码:
class ClassA {
static var shared: ClassA!
class func createSolitaire() {
shared = self.init()
}
}
class ClassB : ClassA {
}
要重现该问题,请从任何地方调用 ClassB.createSolitaire()...例如,PlayGround 或 viewController 中的 viewLoaded 方法。
【问题讨论】:
-
minimal reproducible example 会很有帮助。
-
示例添加到原始帖子。
-
shared = self.init()行在我的 Xcode 10 中无法编译:“使用元类型值构造类类型 'ClassA' 的对象必须使用'必需'初始化程序” -
所以我没有 Xcode 10(运行 9.4),但这已经足够提示了。我只是用“必需”向 ClassA 添加了一个空的 init() 方法,现在 self.init() 返回正确的对象(在我的示例中是 ClassB 的实例)。修复它有点令人不安,但无论如何:-)。非常感谢!必需的 init() { }
标签: swift initialization