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

问题描述:

我收到此错误消息,我不明白为什么。这来自于我继承的一个项目,该项目使用了名为SwiftyOnboardOverlay的此窗格。我阅读了类似的问题,但似乎没有人为我解决问题。错误消息说我不覆盖超类的init,即使我觉得我是

超类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)) 
    } 
} 
+0

我将你的代码复制到Swift游乐场。我删除了对“setup”和“setupViews”的调用。我得到的唯一错误是'WalkthroughOverlay'需要实现所需的'init?(coder:)'方法。 – rmaddy

+0

[Initializer不能覆盖超类中的指定初始值设定项](https://stackoverflow.com/questions/29031270/initializer-does-not-override-a-designated-initializer-from-its-superclass) – Honey

+0

谢谢rmaddy。编辑了这个问题。 init?(coder :)被实现。 –

好了,所以我需要向公众关键字添加到超init方法,使这项工作:

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