繁体   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