使用Swift子类化SKLabelNode错误

使用Swift子类化SKLabelNode错误,swift,sprite-kit,Swift,Sprite Kit,我有下面的类,它是SKLabelNode的一个子类。这门课没有老师是不行的 override init(){ super.init() } 打电话。似乎SKLabelNode正在尝试调用一个没有参数的init()方法,或者是在某个地方发生了导致此问题的其他事情 这是简化的类 import UIKit import SpriteKit class PulsatingText: SKLabelNode { override init(){ sup

我有下面的类,它是SKLabelNode的一个子类。这门课没有老师是不行的

override init(){
        super.init()
    }
打电话。似乎SKLabelNode正在尝试调用一个没有参数的init()方法,或者是在某个地方发生了导致此问题的其他事情

这是简化的类

import UIKit
import SpriteKit

class PulsatingText: SKLabelNode {

    override init(){
        super.init()
    }

    init (fontNamed:String!, theText: String!, theFontSize: CGFloat!){
        super.init(fontNamed: fontNamed)
        self.text = theText
        self.fontSize = theFontSize
    }


    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
如果我移除

override init(){
            super.init()
        }
我得到一个运行时崩溃,以下错误被记录到控制台

致命错误:对类“MobileTutsInvaderz.pulsingText”使用未实现的初始值设定项“init()”

下面是我调用该方法的方式

让InvesterText=脉动文字(字体名为:“粉笔”,文字名为“InvesterZ”,字体大小:50)

我还包括下面的堆栈跟踪图像


您需要初始化
init()
方法。因为每次初始化
SKLabelNode
时都会调用默认的
init()
方法。您可以通过实现
override init()
并添加
println
语句来测试它,如下所示:

override init() {
    super.init()
    println("test")
}
var label:PulsatingText = PulsatingText(fontNamed: "Arial", theText: "hey", theFontSize: 12)
如果现在初始化这样的labelnode:

override init() {
    super.init()
    println("test")
}
var label:PulsatingText = PulsatingText(fontNamed: "Arial", theText: "hey", theFontSize: 12)

println(“test”)
将被调用。

因为您只想添加
便利性
初始值设定项,其余的保持不变,所以不需要覆盖指定的初始值设定项。因此,只需如下更改代码:

class PulsatingText: SKLabelNode {

    convenience init (fontNamed:String!, theText: String!, theFontSize: CGFloat!){
        self.init(fontNamed: fontNamed)
        self.text = theText
        self.fontSize = theFontSize
    }
}

SKLabelNode
的默认初始值设定项是
init(fontNamed fontName:String!)
,您是否尝试重写它?您能显示调用该类的代码吗?@我听到帖子显示我正在调用该类。@NikitaIvaniushchenko我也没有尝试重写它不,您在该类中看到的就是它。这给出了一个错误,事实上,我做的不止这些。我简化了init方法。为了弄清调用super.init()的原因,您使用的XCode版本是什么?我使用6.2。您可以添加错误吗?Xcode 12.2给出了这个错误:
PulsingText的便利初始值设定项必须委托(使用'self.init'),而不是链接到超类初始值设定项(使用'super.init')
最终调用init是有意义的,但奇怪的是它调用init()你能解释一下为什么它会调用子类init()方法吗。?我试图理解为什么它是这样工作的。谢谢,我同意这看起来很奇怪。有时斯威夫特不遵守常识。