super.init() 无法在 swift3 中调用
Posted
技术标签:
【中文标题】super.init() 无法在 swift3 中调用【英文标题】:super.init() couldn't be called in swift3 【发布时间】:2016-11-07 05:23:22 【问题描述】:super.init()
被调用时,报错:
必须调用超类“UICollectionViewCell”的指定初始化程序。
当我在 swift 2.2 版中使用它时,它确实工作得很好。
但是一旦我将 Xcode 版本升级到 8.0,我一直在使用 Swift 3.0 版本并且super.init()
不适合我。
【问题讨论】:
【参考方案1】:从 swift3 开始,他们已经删除了 UICollectionViewCell 的 init()。所以你必须使用 super.init(frame: CGRect) 而不是普通的 init()。
【讨论】:
【参考方案2】:你可以使用 super.init(frame: CGRectZero)
【讨论】:
【参考方案3】:你可以使用便捷初始化器代替指定初始化器
Swift 有三个关于指定初始化器和便利初始化器如何相互关联的规则。我不想解释它们,而是直接引用 Apple 的 iBook:
1) 指定初始化程序必须从其直接超类调用指定初始化程序。
2) 便利构造器必须调用同一个类的另一个构造器。
3) 便利构造器最终必须调用指定构造器。
摘自:Apple Inc. “Swift 编程语言”。电子书。 https://itun.es/us/jEUH0.l
代替
init()
super.init()
你可以使用
convenience init()
self.init()
【讨论】:
【参考方案4】:您只需要按照错误消息中的说明调用指定的初始化程序即可。
指定的初始化器是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()
【讨论】:
以上是关于super.init() 无法在 swift3 中调用的主要内容,如果未能解决你的问题,请参考以下文章
如何在Swift 3中修复我的自定义UITextField对象?
为啥我不能在 Swift 中调用 UIViewController 上的默认 super.init()?