泛型符合协议和类(UITableViewCell)

时间:2018-06-24 07:49:24

标签: swift uitableview generics protocols

我想创建一个通用的Datasource类,因此我希望该通用类同时符合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 :(得分:1)

代替

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

您应该写

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

删除class,它将按预期工作。