此代码有效:
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 帖子,但没有解释: Swift : Error: 'required' initializer 'init(coder:)' must be provided by subclass of 'UIView'
最佳答案
看。根据Apple documentations默认情况下,Swift 子类不继承它们的父类(super class)初始化器。它们仅在某些情况下被继承,其中之一是:如果您的子类没有定义任何指定的初始化器,它会自动继承其父类(super class)的所有指定初始化器。因此,如果您没有实现 init(frame: CGRect)
,所有 super 初始化器都会被继承。
同时 UIView 采用了 NSCoding 协议(protocol),它需要一个 init(coder:)
初始化器。因此,如果您正在实现 init(frame: CGRect)
,您的类将不再继承 super 初始化器。所以你也必须实现那个:
required init?(coder decoder: NSCoder) {
super.init?(coder: decoder)
}
关于ios - 它显示 "required initializer init must be provided in subclass of UIControl"当我覆盖 init(frame : CGRect),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36502307/