swift 3 override init不会覆盖/找不到重载

时间:2016-11-08 16:26:45

标签: override swift3 initializer

我似乎无法使用来自父类的正确初始化程序从我的应用程序中扩展cocoapod ra1028 / Former中的类。这是为什么?

见下面的情况分为pod和我的应用程序代码(ExtendedFormLabelHeaderView类)中的代码

// ra1028/Former cocaopod class signatures

public protocol FormableView: class {}
public protocol LabelFormableView: FormableView {}

open class FormHeaderFooterView: UITableViewHeaderFooterView {
    required public init?(coder aDecoder: NSCoder) {     
        super.init(coder: aDecoder)
    }
    override public init(reuseIdentifier: String?) {
        super.init(reuseIdentifier: reuseIdentifier)
    }
}

open class FormLabelHeaderView: FormHeaderFooterView, LabelFormableView {
    required public init?(coder aDecoder: NSCoder) { 
        super.init(coder: aDecoder)
    }
    override public init(reuseIdentifier: String?) {
        super.init(reuseIdentifier: reuseIdentifier)
    }
}

// my app code

open class ExtendedFormLabelHeaderView: FormLabelHeaderView {
    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    override public init(reuseIdentifier: String?) {
        super.init(reuseIdentifier: reuseIdentifier)
    }
}

在游乐场的代码上运行。

但是在我的工作区中将其作为设置运行(来自Swift 2.2,转换为Swift 3),它首先会抱怨 ExtendedFormLabelHeaderView override init(reuseIdentifier: String?)初始化程序不公开(很可能是因为它无法找到需要覆盖的初始化程序?)然后我最终得到these error messages:

  • Initializer does not override a designated initializer from its superclass.
  • Argument labels '(reuseIdentifier:)' do not match any available overloads

其他一些注意事项:

  • 它在2.2
  • 中运作
  • 我将Former更新为最新的Swift 3.0版本
  • ExtendedFormLabelHeaderView 类中的违规初始值设定项中删除override关键字会对第一行产生不同的错误:Initializer 'init(reuseIdentifier:)' with Objective-C selector initWithReuseIdentifier:' conflicts with implicit initializer 'init(reuseIdentifier:)' from superclass

0 个答案:

没有答案