Swift ViewModel与UITableViewCell的关联类型

时间:2016-03-20 20:07:01

标签: ios swift uitableview protocols associated-types

我有以下协议和ViewModel

class ViewModel1 {}
class ViewModel2 {}

protocol CellViewModelType {
    typealias ViewModel
    func bind(vm:ViewModel)
}

class TVC1 : UITableViewCell, CellViewModelType {
    typealias ViewModel = ViewModel1
    func bind(vm:ViewModel)
}

class TVC2 : UITableViewCell, CellViewModelType {
    typealias ViewModel = ViewModel2
    func bind(vm:ViewModel)
}

此设置允许我将ViewModel绑定到TableViewCell类。 但我正在努力的地方就是绑定本身:

// error: Protocol 'CellViewModelType' can only be used as a generic constraint because it has Self or associated type requirements
let cell = tableView.dequeueReusableCellWithIdentifier(item.0, forIndexPath: indexPath) as! CellViewModelType
cell.bind(someViewModelReference)

我到目前为止唯一的解决方法是使用动态调度(performSelector),我想知道是否有办法直接调用该方法而不使用运行时。

1 个答案:

答案 0 :(得分:0)

你想做的事情实际上没有意义。由于错误说您想要转换为具有关联类型的协议,并且当前在执行转换时无法提供该类型而没有类型,因此转换单元格无法知道它可以采用何种类型的对象作为bind函数的参数。您应该使用TVC1关键字检查您的单元格是TVC2类型还是is并投射到该单元格。然后你可以在铸造参考上调用bind