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

我试图继承我创建的继承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 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
,以获得与您编写的相同的效果