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

use*_*232 1 user-interface speech ios avspeechsynthesizer swift

通过此 appcoder 教程构建文本到语音应用程序教程并运行 swift 1.2-> swift 2.0 功能。

演示项目中有一个类... IOS 10.11.1 下的 Xcode 7.1.1 不喜欢它,给了我错误。覆盖 init() 语句上的“初始化器不会覆盖其超类中的指定初始化器”,后面跟着错误“必须调用超类 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
}

}
Run Code Online (Sandbox Code Playgroud)

这段代码应该说什么?

rob*_*off 5

由于UISlider没有定义或继承init()为指定的初始值设定项,因此您无法从子类中调用它init

\n\n
class CustomSlider: UISlider {\n\n    var sliderIdentifier: Int!\n\n    required init() {\n        super.init(frame: CGRect.zero)\n        sliderIdentifier = 0\n    }\n\n\n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        sliderIdentifier = 0\n    }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
class CustomSlider: UISlider {\n\n    var sliderIdentifier: Int! = 0\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

有关更多信息,请阅读《Swift 编程语言》中标题为 \xe2\x80\x9cDesignated Initializers 和 Convenience Initializers\xe2\x80\x9d 的部分。

\n