错误消息说我不覆盖超类的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:
截图:
这是怎么回事吗?谢谢你的帮助。
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))
}
}
答
好了,所以我需要向公众关键字添加到超init方法,使这项工作:
override public init(frame: CGRect) {
super.init(frame: frame)
setUp()
}
我将你的代码复制到Swift游乐场。我删除了对“setup”和“setupViews”的调用。我得到的唯一错误是'WalkthroughOverlay'需要实现所需的'init?(coder:)'方法。 – rmaddy
[Initializer不能覆盖超类中的指定初始值设定项](https://stackoverflow.com/questions/29031270/initializer-does-not-override-a-designated-initializer-from-its-superclass) – Honey
谢谢rmaddy。编辑了这个问题。 init?(coder :)被实现。 –