【发布时间】:2016-11-07 05:23:22
【问题描述】:
super.init()被调用时,报错:
必须调用超类“UICollectionViewCell”的指定初始化程序。
当我在 swift 2.2 版中使用它时,它确实工作得很好。
但是一旦我将 Xcode 版本升级到 8.0,我一直在使用 Swift 3.0 版本并且super.init() 不适合我。
【问题讨论】:
标签: ios swift swift3 uicollectionviewcell
super.init()被调用时,报错:
必须调用超类“UICollectionViewCell”的指定初始化程序。
当我在 swift 2.2 版中使用它时,它确实工作得很好。
但是一旦我将 Xcode 版本升级到 8.0,我一直在使用 Swift 3.0 版本并且super.init() 不适合我。
【问题讨论】:
标签: ios swift swift3 uicollectionviewcell
从 swift3 开始,他们已经删除了 UICollectionViewCell 的 init()。所以你必须使用 super.init(frame: CGRect) 而不是普通的 init()。
【讨论】:
你可以使用 super.init(frame: CGRectZero)
【讨论】:
你可以使用便捷初始化器代替指定初始化器
Swift 有三个关于指定初始化器和便利初始化器如何相互关联的规则。我不想解释它们,而是直接引用 Apple 的 iBook:
1) 指定初始化程序必须从其直接超类调用指定初始化程序。
2) 便利构造器必须调用同一个类的另一个构造器。
3) 便利构造器最终必须调用指定构造器。
摘自:Apple Inc. “Swift 编程语言”。电子书。 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()
【讨论】: