现在,Swift 1.2中的类层次结构的初始化失败了

时间:2015-02-11 08:10:41

标签: swift compiler-errors

假设有以下类结构:

class A : SKSpriteNode
{
    let foo : CGFloat

    required init?(coder aDecoder: NSCoder) { ... }

    init(foo: CGFloat)
    {
        self.foo = foo
        super.init(
             texture: SKTexture(imageNamed: "test"),
             color: UIColor.blackColor(),
             size: CGSizeMake(42, 42))
    }
}

class B : A
{

    required init?(coder aDecoder: NSCoder) { ... }

    init()
    {
        super.init(foo: 42)
    }

}

AB位于不同的模块中,在B中显示以下编译器错误:

  

初始化程序' init()'覆盖Objective-C方法' init'来自超类' SKSpriteNode'

但是,将init()中的B更改为override init()时,会出现以下错误:

  

初始化程序不会覆盖其超类

中的指定初始值设定项

只有通过在init()中添加A来解决这个问题,而init会调用基类的A

观察:

  1. 上面的代码在Swift 1.1中有效(即没有覆盖)。
  2. Binit()位于同一模块中时,它确实有效。
  3. A中覆盖override init()并在B中使用SKSpriteNode时,它确实有用。
  4. 发行说明声明:
  5.   

    导入的C结构现在在Swift中有一个默认的初始化器,它将所有struct的字段初始化为零。

    但IMO与此无关,因为struct不是{{1}}。

    这是编译器错误还是我在发行说明中遗漏了其他内容?

    更新 Apple在Xcode 6.3 Beta 2中解决此问题。

0 个答案:

没有答案