斯威夫特:初始化程序不自其超
问题描述:
林重写指定初始化试图继承一个类我做了继承NSObject的,这些都是片段:斯威夫特:初始化程序不自其超
bPlayer.swift:
import UIKit
import Foundation
import QuartzCore
class bluetoothPlayer: player {
override init (game: MultiGame) {
super.init(game: game)
}
}
Player.swift :
import UIKit
import Foundation
import QuartzCore
class player: NSObject {
init (game: NSObject) {
super.init()
}
}
,但我得到了以下错误:
Initializer does not override a designated initializer from its superclass
如果我删除从bluetoothPlayer初始化的“覆盖”关键词,下面的错误出现,而不是:
Initializer 'init(game:)' with Objective-C selector 'initWithGame:' conflicts with initializer 'init(game:)' from superclass 'player' with the same Objective-C selector
答
那是因为你没有。你没有覆盖的功能,你超载它。您创建了一个新功能(init
),但名称相同,但的参数不同。这并不算作重写函数。
请参阅this SO问题(但在Java中)。请参阅this other关于在Swift中重写多个函数的SO问题。
这是因为NSObject
≠MultiGame
可以通过声明它像这样在bluetoothPlayer
覆盖您init
功能:
override init (game: NSObject) {
super.init(game: game)
}
你可以做一个检查,以确保game
是MultiGame
类型来达到与你所写的相同的效果。
谢谢!这工作! –