错误消息说我不是从超类覆盖init,即使我觉得我是

时间:2017-09-16 20:39:00

标签: ios swift init

我收到此错误消息,我不明白为什么。这是我继承的一个项目,它正在使用这个名为SwiftyOnboardOverlay的pod。我读过类似的问题,但似乎没有人为我解决这个问题。

超级类init的名称与我收到错误的名称相同。

错误讯息: “初始化程序不会覆盖其超类”

中指定的初始值设定项
class WalkthroughOverlay: SwiftyOnboardOverlay {
...

 override init(frame: CGRect) {//error here
    super.init(frame:frame)
        setupViews()
    }
required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}


...
}

父初始化者

open class SwiftyOnboardOverlay: UIView {

   override init(frame: CGRect) {
        super.init(frame: frame)
        setUp()
    }

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


}

编辑1:

截图:

enter image description here

enter image description here

这里发生了什么?谢谢你的帮助。

EDIT2:

好的,所以前面的开发人员也使用了方便的初始化器进行了这些扩展:

extension UIView {
    /// EZSwiftExtensions
    public convenience init(x: CGFloat, y: CGFloat, w: CGFloat, h: CGFloat) {
        self.init(frame: CGRect(x: x, y: y, width: w, height: h))
    }

    /// EZSwiftExtensions, puts padding around the view
    public convenience init(superView: UIView, padding: CGFloat) {
        self.init(frame: CGRect(x: superView.x + padding, y: superView.y + padding, width: superView.w - padding*2, height: superView.h - padding*2))
    }

    /// EZSwiftExtensions - Copies size of superview
    public convenience init(superView: UIView) {
        self.init(frame: CGRect(origin: CGPoint.zero, size: superView.size))
    }
}

1 个答案:

答案 0 :(得分:0)

好的,所以我需要将public关键字添加到超类init方法中以使其工作:

override public init(frame: CGRect) {
    super.init(frame: frame)
    setUp()
}