ios - Swift init 方法错误:声明“init(coder:)”不能覆盖多个超类声明
问题描述
我的项目中有许多自定义视图( UIView 的子类)。我需要重写init
方法。
我只是想override init(frame: CGRect)
方法。而且我不想init?(coder
一次又一次地在许多 UIView 子类中编写相同的代码。
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
并且我给 UIView 添加了一个扩展,然后就OK了。
extension UIView{
convenience init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
当我自定义 UITableView 类时,就会出现问题。
class Table: UITableView {
override init(frame: CGRect, style: UITableView.Style) {
super.init(frame: frame, style: style)
}
Xcode 提示首先,
“必需”初始化程序“init(coder:)”必须由“UITableView”的子类提供
class Table: UITableView {
override init(frame: CGRect, style: UITableView.Style) {
super.init(frame: frame, style: style)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
其次是 Xcode 提示,
声明 'init(coder:)' 不能覆盖多个超类声明
如何解决?
解决方案
因为convenience init
和required init
矛盾。初始化器的实现不能超过一个。
推荐阅读
- java - 按索引将数据添加到对象列表索引中
- tableau-api - 在没有数据的日期上方显示标记
- python - 使用 Python 创建一个非常大的二进制频率矩阵来运行协同过滤
- isabelle - 伊莎贝尔发展统计
- vb.net - .doc文件批量转换为.txt的更新方法
- vba - Microsoft Project - 防止字段自动计算
- mysql - 为什么我的数据库没有更新?(使用netbeans xampp mysql)
- scala - 如何在 Spark(使用 Scala)中用逗号替换空格?
- python - django-admin:在 HostGator 共享主机中找不到用于启动 django 项目的命令
- r - 编写一个函数以将另一个函数包含在回归模型中