假设有以下类结构:
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)
}
}
A
和B
位于不同的模块中,在B
中显示以下编译器错误:
初始化程序' init()'覆盖Objective-C方法' init'来自超类' SKSpriteNode'
但是,将init()
中的B
更改为override init()
时,会出现以下错误:
初始化程序不会覆盖其超类
中的指定初始值设定项
只有通过在init()
中添加A
来解决这个问题,而init
会调用基类的A
。
观察:
B
和init()
位于同一模块中时,它确实有效。A
中覆盖override init()
并在B
中使用SKSpriteNode
时,它确实有用。导入的C结构现在在Swift中有一个默认的初始化器,它将所有struct的字段初始化为零。
但IMO与此无关,因为struct
不是{{1}}。
这是编译器错误还是我在发行说明中遗漏了其他内容?
更新 Apple在Xcode 6.3 Beta 2中解决此问题。