簡體   English   中英

swift3中無法調用super.init()

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM