它显示 "required initializer init must be provided in subclass of UIControl" 当我覆盖 init(frame: CGRect)

It shows "required initializer init must be provided in subclass of UIControl" When I override init(frame: CGRect)

此代码有效:

import UIKit

class wheel: UIControl {

}

但是这段代码没有:

class wheel: UIControl {
override init(frame: CGRect) {
    super.init(frame: frame)
}

当我重写 init(frame : CGRect) 但不是 init(coder aDecoder: NSCoder).

为什么我必须实施 init(coder aDecoder: NSCoder)?如果我没有实施,为什么我不需要实施它init(frame: CGRect)

我发现了一个类似的 Stack Overflow post 但它没有解释:

看。根据 Apple documentations Swift subclasses 默认不继承它们的 superclass 初始值设定项。它们只在某些情况下被继承,其中之一是:如果你的 subclass 没有定义任何指定的初始化器,它会自动继承它所有的 superclass 指定的初始化器。所以如果你没有实现 init(frame: CGRect) ,所有的超级初始化器都会被继承。

另外 UIView 采用了 NSCoding 协议,这需要一个 init(coder:) 初始化器。因此,如果您正在实施 init(frame: CGRect),您的 class 将不再继承超级初始化程序。所以你也必须实施那个:

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

创建模型对象子classes 时,有时您可能希望添加自己的自定义初始化方法以增加便利性。

由于 Swift 内省的一些现有限制,这些方法不能指定为 class 的初始值设定项。相反,需要使用同名的 Swift 关键字 like this

将它们标记为便利初始值设定项