【问题标题】:Swift - self.init() within class method not creating correct typeSwift - 类方法中的 self.init() 没有创建正确的类型
【发布时间】:2018-09-30 15:51:59
【问题描述】:

我有一个类层次结构,其中 ClassB 继承自 ClassA

静态变量solitaireClassA上定义

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


【解决方案1】:

感谢 Martin R 的评论,我找到了解决方法:

我只是简单地用“必需”向 ClassA 添加了一个空的 init() 方法,现在 self.init() 返回正确的对象(在我的示例中是 ClassB 的实例,而不是 ClassA)。修复它有点令人不安,但无论如何。

必需的初始化(){ }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2010-11-06
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多