Я пытаюсь придумать MVVM, ориентированный на протокол, для своих ячеек табличного просмотра.У меня их много.
my viewModel
protocol PlainTableViewCellModelType {
var backgroundColor : UIColor {get}
var textColor: UIColor {get}
var titleFont : UIFont {get }
var accessoryType : UITableViewCellAccessoryType {get}
var textLabelNumberOfLines: Int {get}
}
my view
protocol PlainTableViewCellType{
associatedtype viewModel : PlainTableViewCellModelType
func setupUI(forViewModel viewModel: viewModel)
}
my class
соответствие
class PlainTableViewCell : CCTableViewCell, PlainTableViewCellType{
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
required init?(coder aDecoder: NSCoder) {
fatalError()
}
func setupUI(forViewModel viewModel: PlainTableViewCellModelType){
contentView.backgroundColor = viewModel.backgroundColor
textLabel?.textColor = viewModel.textColor
textLabel?.font = viewModel.titleFont
accessoryType = viewModel.accessoryType
textLabel?.numberOfLines = viewModel.textLabelNumberOfLines
}
}
Результаты текущих настроекв следующей ошибке:
Тип 'PlainTableViewCell' не соответствует протоколу 'PlainTableViewCellType'
Я могу заставить его работать, если я делаю:
protocol PlainTableViewCellType{
func setupUI(forViewModel viewModel: PlainTableViewCellModelType)
}
Но я хочу иметь associatedType
, чтобы я мог применять одну и ту же модель во всех моих PlainTableViewCellType
функциях
РЕДАКТИРОВАТЬ: Я счастлив выслушать альтернативы, ноСначала я хочу узнать , почему это не работает.