实现自定义表格视图单元格并在dequeueReusableCellWithIdentifier上获取以下错误,任何人都可以提供帮助。
代码:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
//static DynamicTableViewCell *cell = nil;
var cell : DynamicTableViewCell?
var token: dispatch_once_t = 0
dispatch_once(&token) { () -> Void in
cell = tableView.dequeueReusableCellWithIdentifier("cell")
}
self.setUpCell(cell!, indexPath: indexPath)
return self.calculateHeightForConfiguredSizingCell(cell!)
}
答案 0 :(得分:1)
我不确定你的做法是否足够稳定,但你指出的Objective-C代码可以转换成Swift:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
struct My {
static var cell : DynamicTableViewCell?
static var token: dispatch_once_t = 0
}
dispatch_once(&My.token) { () -> Void in
My.cell = tableView.dequeueReusableCellWithIdentifier("cell") as? DynamicTableViewCell
}
self.setUpCell(My.cell!, indexPath: indexPath)
return self.calculateHeightForConfiguredSizingCell(My.cell!)
}
错误消息否'dequeueReusableCellWithIdentifier'候选者产生预期的上下文结果类型'DynamicTableViewCell?'表示dequeueReusableCellWithIdentifier
的返回类型为UITableViewCell?
,无法分配到DynamicTableViewCell?
类型的变量。您只需要一个显式转换来抑制此错误。
但除此之外,您需要将本地cell
和token
设为静态。
您还应该知道Swift 3已将dispatch_once
排除在标准库之外。