Swift:初始值设定项不会覆盖其超类中指定的初始值设定项
我试图继承我创建的继承NSObject的类,以下是代码片段: bPlayer.swift:Swift:初始值设定项不会覆盖其超类中指定的初始值设定项,swift,inheritance,initialization,Swift,Inheritance,Initialization,我试图继承我创建的继承NSObject的类,以下是代码片段: bPlayer.swift: import UIKit import Foundation import QuartzCore class bluetoothPlayer: player { override init (game: MultiGame) { super.init(game: game) } } import UIKit import Foundation import Qua
import UIKit
import Foundation
import QuartzCore
class bluetoothPlayer: player {
override init (game: MultiGame) {
super.init(game: game)
}
}
import UIKit
import Foundation
import QuartzCore
class player: NSObject {
init (game: NSObject) {
super.init()
}
}
Player.swift:
import UIKit
import Foundation
import QuartzCore
class bluetoothPlayer: player {
override init (game: MultiGame) {
super.init(game: game)
}
}
import UIKit
import Foundation
import QuartzCore
class player: NSObject {
init (game: NSObject) {
super.init()
}
}
但我得到了以下错误:
初始值设定项不会从指定的初始值设定项中重写指定的初始值设定项
超类
如果我从bluetoothPlayer init中删除“override”关键字,则会出现以下错误:
初始值设定项'init(游戏:)'与Objective-C选择器'initWithGame:'
与超类“player”中的初始值设定项“init(game:)”冲突
相同的Objective-C选择器
那是因为你没有。你没有重写这个函数,你重载了它。您创建了一个名称相同但参数不同的新函数(
init
)。这不算作重写函数
请参阅SO问题(但在Java中)。请参见关于在Swift中重写多个函数的问题
这是因为NSObject
≠ <代码>多游戏
您可以通过在bluetoothPlayer
中这样声明来覆盖init
函数:
override init (game: NSObject) {
super.init(game: game)
}
您可以进行检查,确保game
类型为multi-game
,以获得与您编写的相同的效果