類不實現(xiàn)其超類的必需成員所以我今天更新到Xcode 6 beta 5,并注意到我?guī)缀跛蠥pple類的子類都收到了錯誤。錯誤說明:類'x'不實現(xiàn)其超類的必需成員這是我選擇的一個例子,因為這個類目前非常輕量級,因此很容易發(fā)布。class InfoBar: SKSpriteNode { //Error message here
let team: Team
let healthBar: SKSpriteNode
init(team: Team, size: CGSize) {
self.team = team if self.team == Team.TeamGood {
healthBar = SKSpriteNode(color: UIColor.greenColor(), size:size)
}
else {
healthBar = SKSpriteNode(color: UIColor.redColor(), size:size)
}
super.init(texture:nil, color: UIColor.darkGrayColor(), size: size)
self.addChild(healthBar)
}}所以我的問題是,為什么我收到此錯誤,我該如何解決?我沒有實施什么?我正在打電話給指定的初始化程序。
3 回答

陪伴而非守候
TA貢獻1757條經(jīng)驗 獲得超8個贊
來自開發(fā)者論壇上的Apple員工:
“向編譯器和構(gòu)建的程序聲明你真的不希望與NSCoding兼容的一種方法是做這樣的事情:”
required init(coder: NSCoder) { fatalError("NSCoding not supported")}
如果您知道您不希望符合NSCoding,則可以選擇此選項。我已經(jīng)使用了很多我的SpriteKit代碼,因為我知道我不會從故事板中加載它。
您可以采用的另一個選項是將方法實現(xiàn)為便利init,如下所示:
convenience required init(coder: NSCoder) { self.init(stringParam: "", intParam: 5)}
請注意調(diào)用初始化程序self
。這允許您只需要為參數(shù)使用虛擬值,而不是所有非可選屬性,同時避免拋出致命錯誤。
第三種選擇當(dāng)然是在調(diào)用super時實現(xiàn)該方法,并初始化所有非可選屬性。如果對象是從故事板加載的視圖,則應(yīng)采用此方法:
required init(coder aDecoder: NSCoder!) { foo = "some string" bar = 9001 super.init(coder: aDecoder)}
- 3 回答
- 0 關(guān)注
- 606 瀏覽
添加回答
舉報
0/150
提交
取消