Junkor

Typed TableViewController(Typed Table View Controllers)

文章翻译自objc,原文连接:『Typed Table View Controllers

这周我们来品尝一下iOS开发的黄油和面包:TableViewController。第一步,我们创建一个UITableViewController的子类,并且包含一个普通的类型参数A:

class MyTableViewController<A>: UITableViewController {

现在,我们可以添加一个arrsy型属性来存储列表的数据元素,当一个新值被设置时,tableView就会reload:

var items: [A] = [] {
    didSet { self.tableView.reloadData() }
}

我们还需要一个配置cell的函数,入参是一个cell和一个A类型数据元素:

var configureCell: (UITableViewCell, A) -> () = { _ in () }

最后,我们重写一下初始化函数(作为子类化的实现一般都需要这么做),并对cellForRowAtIndexPath和numberOfRowsInSection做一个简单实现:

override init(style: UITableViewStyle) {
    super.init(style: style)
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: nil)
    configureCell(cell, items[indexPath.row])
    return cell
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return items.count
}

欧了。现在我们可以在确保类型安全的情况下用一个tableView来展示A类型的数据列表了~

Update:不幸的是,上边的代码在运行时无法正常工作。具体的可用实现见下一节