没有'dequeueReusableCellWithIdentifier'候选者产生预期的上下文结果类型'DynamicTableViewCell?'

时间:2016-08-10 19:25:09

标签: swift

实现自定义表格视图单元格并在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!)

    }

1 个答案:

答案 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?类型的变量。您只需要一个显式转换来抑制此错误。

但除此之外,您需要将本地celltoken设为静态。

您还应该知道Swift 3已将dispatch_once排除在标准库之外。