2016-03-20 3 views
0

У меня есть следующие протоколы и ViewModelSwift ViewModel с ассоциированным типом для UITableViewCell

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

Что вы хотите сделать, на самом деле не имеет смысла. Поскольку ошибка говорит о том, что вы хотите применить к протоколу со связанным типом, и в настоящее время нет способа предоставить этот тип при выполнении броска и без какого-либо типа, литая ячейка не будет знать, какой тип объектов он может принимать в качестве аргументов для bind функция. Вы должны проверить, имеет ли ваша ячейка тип TVC1 или TVC2 с использованием ключевого слова is. Затем вы можете просто позвонить bind на литой ссылке.

Смежные вопросы