初始化程序不会覆盖其超类中的指定初始化程序,Swift 2.0

Initializer does not override a designated initializer from its superclass, Swift 2.0

通过此 Appcoder 教程 building a text to speech app tutorial 和 运行 进入 swift 1.2-> swift 2.0 功能。

演示项目中有一个 class... Xcode 7.1.1 在 IOS 10.11.1 下不喜欢,给我错误。 "initialiser doesn't override the designated initialiser from its super class" 覆盖 init() 语句,后跟错误 "Must call the designated initialiser of the superclass UISlider"。

好的,对 Swift 比较陌生;在我开始解决这个问题的地方,我有点迷失了。

class CustomSlider: UISlider {

var sliderIdentifier: Int!

override init() { <--- error here
    super.init()  <--- error here

    sliderIdentifier = 0
}


required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    sliderIdentifier = 0
}

}

这段代码应该说什么?

由于 UISlider 没有定义或继承 init() 作为指定的初始值设定项,您不能从子类 init.

中调用它
class CustomSlider: UISlider {

    var sliderIdentifier: Int!

    required init() {
        super.init(frame: CGRect.zero)
        sliderIdentifier = 0
    }


    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        sliderIdentifier = 0
    }

}

在这种情况下,您可以分解出 sliderIdentifier 的初始化并仅继承所有 UISlider 的初始化器:

class CustomSlider: UISlider {

    var sliderIdentifier: Int! = 0

}

有关详细信息,请阅读 The Swift Programming Language 中标题为“指定构造器和便利构造器”的部分。