[英]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.