2016-11-07 69 views
2

被称为当super.init()被调用时,它显示了错误:super.init()不能在swift3

Must call a designated initializer of the superclass 'UICollectionViewCell'.

它确实工作完美,当我在SWIFT版本2.2中使用它。

但是,一旦我将Xcode版本升级到8.0,我一直在使用Swift版本3.0和super.init()不适用于我。

回答

0

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

0

可以使用super.init(帧:CGRectZero)

0

可以使用便利的初始化,而不是

夫特具有三个规则,规定如何指定和便利初始化相互关联指定初始化。我只是直接引用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() 
} 
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()