我正在使用http://www.raywenderlich.com/62435/make-swipeable-table-view-cell-actions-without-going-nuts-scroll-views创建一个自定义的表格单元格,但是我使用的是swift而不是objective c。
这是我在swift中的表格单元格视图。
protocol SwipeableCellDelegate {
func buttonOneActionForItemText(itemText: NSString)
func buttonTwoActionForItemText(itemText: NSString)
}
class MyTableViewCell: UITableViewCell {
@IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!
@IBOutlet weak var mytextLabel: UILabel!
@IBOutlet weak var testLabel: UILabel!
var delegate: SwipeableCellDelegate
init(delegate: SwipeableCellDelegate) {
self.delegate = delegate
super.init()
}
required init(coder aDecoder: NSCoder) {
// fatalError("init(coder:) has not been implemented")
super.init(coder : aDecoder)
}
}
但它没有编译,我得到错误说:
我的表格视图单元格. swift:38:9:属性"self.delegate"在super.init调用时未初始化
如果去掉"init(coder aDecoder:NSCoder)",我收到错误消息,指出"必需的"初始化程序" init(coder:)"必须由UITableViewCell"的子类提供。
我看过这个帖子
关于在我所需的init中要做什么(coder aDecoder:NSCoder)的编码器。
但我无法编译代码。
如果有人能帮助我,我将不胜感激。
谢谢你。
2条答案
按热度按时间92dk7w1h1#
这意味着你需要在所有init方法的末尾定义delegate,因为这个类变量没有被设置为可选的,一种方法是将它设置为可选的(意味着它可以是nil)
在此处阅读初始化和可选属性类型
7hiiyaii2#
有三种方法来解决你的问题,不同的美丽和麻烦的数量。
1.如果您只需要编译代码,但从不使用coder中所需的init,则可以将默认错误保留在那里。
1.你也可以让delegate字段成为可选的,但是从现在开始你需要处理代码中nil的理论可能性,就像这样:
var代表:可移动单元格代理?。
guard let dlgt = delegate else {print("此单元格未设置委托");返回}
1.或者,您可以在某个公共位置为委托定义一个默认值,并在所需的init中设置它。