【问题标题】:Error message saying I am not overriding init from superclass even though I feel like I am错误消息说我没有覆盖超类的 init,即使我觉得我是
【发布时间】:2017-09-16 20:39:00
【问题描述】:

我收到此错误消息,但我不明白为什么。这是来自我继承的一个项目,该项目正在使用这个名为 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:

截图:

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

编辑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))
    }
}

【问题讨论】:

  • 我将您的代码复制到了 Swift 游乐场。我删除了对setupsetupViews 的调用。我得到的唯一错误是WalkthroughOverlay 需要实现所需的init?(coder:) 方法。
  • 谢谢 rmaddy。编辑了问题。 init?(coder:) 已实现。
  • 是的,就像我说的那样,它是我继承的代码。那个 init 不在我展示的类中,但我现在会寻找它。你似乎强调马特。那是真正的代码,我只是不想粘贴整个课程,所以我复制粘贴了我认为相关的内容。
  • 您是否需要将“public”关键字添加到您的子类所需的 init?() 定义中?我记得在某处读过,您不能对覆盖的访问权限低于超类函数的访问权限。 (或者只是从第一个子类的 init 中删除 public?()鉴于它是开放的)

标签: ios swift init


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2015-07-29
    • 1970-01-01
    • 2016-06-23
    • 2012-08-17
    • 2021-12-24
    相关资源
    最近更新 更多