【问题标题】:Initializer does not override a designated initializer from its superclass, Swift 2.0Initializer 不会覆盖其超类 Swift 2.0 中的指定初始化程序
【发布时间】:2015-11-15 17:55:49
【问题描述】:

通过这个 appcoder 教程 building a text to speech app tutorial 工作并遇到 swift 1.2-> swift 2.0 功能。

演示项目中有一个类... IOS 10.11.1 下的Xcode 7.1.1 不喜欢它,给我错误。在 override 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
}

}

这段代码 sn-p 应该说什么?

【问题讨论】:

    标签: ios swift user-interface speech avspeechsynthesizer


    【解决方案1】:

    由于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 的初始化,并继承所有 UISliders 初始化器:

    class CustomSlider: UISlider {
    
        var sliderIdentifier: Int! = 0
    
    }
    

    有关更多信息,请阅读The Swift Programming Language 中标题为“指定初始化程序和便利初始化程序”的部分。

    【讨论】:

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