[英]Swift: 'super.init' isn't called on all paths before returning from initializer?
[英]super.init() couldn't be called in swift3
调用super.init()
,显示错误:
必须调用超类'UICollectionViewCell'的指定初始化器。
当我在迅速的2.2版本中使用它时,它确实运行良好。
但是,一旦我将Xcode版本升级到8.0,就一直在使用Swift 3.0版本,并且super.init()
对我不起作用。
从swift3开始,他们已经删除了UICollectionViewCell的init()。 因此,您必须使用super.init(frame:CGRect)而不是普通的init()。
您可以使用super.init(frame:CGRectZero)
您可以使用便捷初始化程序而不是指定的初始化程序
对于指定的初始化器和便捷初始化器之间的关系,Swift有三个规则。 我不想直接解释它们,而是直接引用Apple的iBook:
1)指定的初始值设定项必须从其直接超类调用指定的初始值设定项。
2)便利初始化程序必须从同一类调用另一个初始化程序。
3)便利初始化程序必须最终调用指定的初始化程序。
摘自:Apple Inc.“快速编程语言”。iBooks。 https://itun.es/us/jEUH0.l
代替
init() {
super.init()
}
您可以使用
convenience init() {
self.init()
}
您只需要按照错误消息中的说明调用指定的初始化程序。
指定的初始值设定项是public init(style: UITableViewCellStyle, reuseIdentifier: String?)
:
// Designated initializer. If the cell can be reused, you must pass in a reuse identifier. You should use the same reuse identifier for all cells of the same form.
@available(iOS 3.0, *)
public init(style: UITableViewCellStyle, reuseIdentifier: String?)
因此,您需要调用以下内容:
self.init(style: UITableViewCellStyle.default, reuseIdentifier: "myIdentifier")
要么
super.init(style: UITableViewCellStyle.default, reuseIdentifier: "myIdentifier")
而不是super.init()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.