super.init()无法在swift3中调用

时间:2016-11-07 05:23:22

标签: ios swift swift3 uicollectionviewcell

调用super.init()时,会显示错误:

  

必须调用超类的指定初始值设定项' UICollectionViewCell'。

当我在swift 2.2版中使用它时,它确实工作得很好。

但是,一旦我将Xcode版本升级到8.0,我一直在使用Swift 3.0版,而super.init()对我来说并不起作用。

4 个答案:

答案 0 :(得分:0)

从swift3开始,他们删除了UICollectionViewCell的init()。所以你必须使用super.init(frame:CGRect)而不是普通的init()。

答案 1 :(得分:0)

您可以使用super.init(frame:CGRectZero)

答案 2 :(得分:0)

您可以使用便利初始化程序而不是指定的初始化程序

Swift有三个关于指定和便利初始化程序如何相互关联的规则。而不是试图解释它们,我只是直接引用Apple的iBook:

1)指定的初始化程序必须从其直接超类中调用指定的初始化程序。

2)一个便利初始化器必须从同一个类调用另一个初始化器。

3)便利初始化程序必须最终调用指定的初始化程序。

摘自:Apple Inc.“The Swift Programming Language。”iBooks。 https://itun.es/us/jEUH0.l

而不是

init() {

    super.init()
}

你可以使用

convenience init() {

    self.init()
}

答案 3 :(得分:0)

您只需按照错误消息中的说明调用指定的初始值设定项 指定的初始值设定项为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()