【问题标题】:Swift: Initializer does not override a designated initializer from its superclassSwift:初始化器不会覆盖其超类中的指定初始化器
【发布时间】:2015-11-04 13:15:11
【问题描述】:

我试图继承我创建的继承 NSObject 的类,这些是 sn-ps:

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 不会覆盖其指定的初始化程序 超类

如果我从 bluetoothPlayer init 中删除“override”关键字,则会出现以下错误:

带有 Objective-C 选择器 'initWithGame:' 的初始化器 'init(game:)' 与超类 'player' 中的初始化程序 'init(game:)' 冲突 相同的 Objective-C 选择器

【问题讨论】:

    标签: swift inheritance initialization


    【解决方案1】:

    那是因为你没有。你没有覆盖这个函数,你重载了它。您创建了一个名称相同但参数不同的新函数 (init)。。这不算作覆盖函数。

    请参阅this SO 问题(但在 Java 中)。请参阅this other SO 关于在 Swift 中覆盖多个函数的问题。

    这是因为NSObjectMultiGame

    您可以通过在bluetoothPlayer 中声明它来覆盖您的init 函数:

    override init (game: NSObject) {
        super.init(game: game)
    }
    

    您可以进行检查以确保 game 的类型为 MultiGame 以达到与您编写的相同的效果。

    【讨论】:

      猜你喜欢
      • 2015-05-15
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多