错误消息说我没有从超类中覆盖 init,即使我觉得我是
Error message saying I am not overriding init from superclass even though I feel like I am
我收到此错误消息,但我不明白为什么。这是我继承的一个项目,该项目正在使用名为 SwiftyOnboardOverlay.I 的 pod 阅读类似的问题,但 none 似乎为我解决了这个问题。
超类 init 的名称与我遇到的错误相同。
错误信息:
"Initializer does not override a designated initializer from its superclass"
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:
截图:
这是怎么回事?感谢您的帮助。
编辑2:
好的,所以之前的开发人员也有这些带有便利初始化器的扩展:
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))
}
}
好的,所以我需要将 public 关键字添加到超类 init 方法中以使其工作:
override public init(frame: CGRect) {
super.init(frame: frame)
setUp()
}
我收到此错误消息,但我不明白为什么。这是我继承的一个项目,该项目正在使用名为 SwiftyOnboardOverlay.I 的 pod 阅读类似的问题,但 none 似乎为我解决了这个问题。
超类 init 的名称与我遇到的错误相同。
错误信息: "Initializer does not override a designated initializer from its superclass"
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:
截图:
这是怎么回事?感谢您的帮助。
编辑2:
好的,所以之前的开发人员也有这些带有便利初始化器的扩展:
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))
}
}
好的,所以我需要将 public 关键字添加到超类 init 方法中以使其工作:
override public init(frame: CGRect) {
super.init(frame: frame)
setUp()
}