all*_*nli 3 overriding initialization initializer ios swift
此代码有效:
import UIKit
class wheel: UIControl {
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码没有:
class wheel: UIControl {
override init(frame: CGRect) {
super.init(frame: frame)
}
Run Code Online (Sandbox Code Playgroud)
当我覆盖init(frame:CGRect)但它没有显示错误" 必须在子类中提供所需的初始化程序初始化UIControl " init(coder aDecoder: NSCoder).
为什么我要实施init(coder aDecoder: NSCoder)?如果我没有实现,为什么我不需要实现init(frame: CGRect)呢?
我发现了一个类似的Stack Overflow帖子,但它没有解释: Swift:错误:'required'initulator'init(coder :)'必须由'UIView'的子类提供
iyu*_*una 13
看.根据Apple文档, Swift子类默认不继承其超类初始值设定项.它们仅在某些情况下继承,其中之一是:如果您的子类未定义任何指定的初始值设定项,则它会自动继承其所有超类指定的初始值设定项.因此,如果您没有实现init(frame: CGRect)所有超级初始化器都是继承的.
UIView也采用NSCoding协议,需要init(coder:)初始化器.因此,如果您正在实现init(frame: CGRect),您的类不再继承超级初始化器.所以你也必须实现那个:
required init?(coder decoder: NSCoder) {
super.init?(coder: decoder)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5180 次 |
| 最近记录: |