Общий соответствует протоколу и классу (UITableViewCell) - PullRequest
0 голосов
/ 24 июня 2018

Я хочу создать универсальный класс источника данных, поэтому я хочу, чтобы универсальный объект соответствовал UITableViewCell и протоколу ViewModel одновременно.

protocol ViewModel class {
    associatedtype T
    var viewModel: T { get set }
}


class TableViewDatasourceStandard<G: UITableViewCell>: NSObject, UITableViewDataSource where G: ViewModel {
    let reUseIdentifier: String
    init( reUseIdentifier: String, cell: G) {
        self.reUseIdentifier = reUseIdentifier
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        5
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let row = indexPath.row
        let cell = tableView.dequeueReusableCell(withIdentifier: reUseIdentifier, for: indexPath) as! G
        cell.viewModel
        return cell
    }
}

Я получаю ошибку:

У значения типа 'G' нет члена 'viewModel'

Я пробовал разные вещи, но не могу заставить его работать.Спасибо!

1 Ответ

0 голосов
/ 24 июня 2018

вместо

protocol ViewModel class {
  associatedtype T
  var viewModel: T { get set }
}

Вы должны написать

protocol ViewModel {
  associatedtype T
  var viewModel: T { get set }
}

Удалите class и все будет работать как положено.

...