我有以下协议和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
),我想知道是否有办法直接调用该方法而不使用运行时。
答案 0 :(得分:0)
你想做的事情实际上没有意义。由于错误说您想要转换为具有关联类型的协议,并且当前在执行转换时无法提供该类型而没有类型,因此转换单元格无法知道它可以采用何种类型的对象作为bind
函数的参数。您应该使用TVC1
关键字检查您的单元格是TVC2
类型还是is
并投射到该单元格。然后你可以在铸造参考上调用bind
。