块内,结构中,func中的变量的范围

时间:2014-11-12 11:53:31

标签: ios swift closures

我想这样做:

public func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    struct Cell {
        static let height: CGFloat = {
            var cell:RentalViewCell = tableView.dequeueReusableCellWithIdentifier("RentalViewCell") as RentalViewCell
            return cell.bounds.size.height
        }()
    }
    return Cell.height
}

..但是swift编译器抛出一个摇摆不定的东西,并且因为块内的tableView变量而在创建SIL时给出了分段错误。

我知道还有其他方法可以写这个,但有人可以解释为什么它不能这样工作以及为什么我无法访问tableView变量。我尝试在块中使用捕获列表无济于事。

由于

2 个答案:

答案 0 :(得分:0)

在表视图datasource / delegate方法中定义struct没有任何意义。

在其他地方定义结构 - 如果你真的有充分的理由 -
在数据源方法中使用

我怀疑你真正想要的是设置表格视图的rowHeight属性。

答案 1 :(得分:0)

考虑一下你的代码在说什么,你想要在tableView(heightForRowAtIndexPath:)的所有调用上初始化一个静态实例,高度这是否真的有意义,因为静态实例用a的值初始化单打电话?想象一下,这是一个超类,并且子类使用dequeueReusable...的不同实现,应该使用哪个实现来确定所有子类的高度?

更好的实现方法是将它计算一次到UITableViewController子类的可选项并将其缓存在那里。