我正在尝试将RxSwift / RxDataSource与TableView一起使用,但我无法为configureCell分配现有函数。代码如下:
import UIKit
import RxSwift
import RxCocoa
import RxDataSources
class BaseTableViewController: UIViewController {
// datasources
let dataSource = RxTableViewSectionedReloadDataSource<TableSectionModel>()
let sections: Variable<[TableSectionModel]> = Variable<[TableSectionModel]>([])
let disposeBag: DisposeBag = DisposeBag()
// components
let tableView: UITableView = UITableView()
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
setDataSource()
}
func setupUI() {
attachViews()
}
func setDataSource() {
tableView.delegate = nil
tableView.dataSource = nil
sections.asObservable()
.bindTo(tableView.rx.items(dataSource: dataSource))
.addDisposableTo(disposeBag)
dataSource.configureCell = cell
sectionHeader()
}
func cell(ds: TableViewSectionedDataSource<TableSectionModel>, tableView: UITableView, indexPath: IndexPath, item: TableSectionModel.Item) -> UITableViewCell! {
return UITableViewCell()
}
func sectionHeader() {
}
}
Xcode会抛出以下错误:
/ Users /.../ BaseTableViewController.swift:39:36:无法分配类型'的值(TableViewSectionedDataSource,UITableView,IndexPath,TableSectionModel.Item) - &gt; UITableViewCell的!”输入''(TableViewSectionedDataSource,UITableView,IndexPath,TableSectionModel.Item) - &gt;的UITableViewCell!
错误在行
处抛出dataSource.configureCell = cell
你有什么想法吗?
由于
答案 0 :(得分:0)
您只需要从细胞方法的返回类型UITableViewCell!
中删除func cell(ds: TableViewSectionedDataSource<TableSectionModel>, tableView: UITableView, indexPath: IndexPath, item: TableSectionModel.Item) -> UITableViewCell {
return UITableViewCell()
}
。
public typealias CellFactory = (TableViewSectionedDataSource<S>, UITableView, IndexPath, I) -> UITableViewCell
通过这种方式,您的函数变得与RxDataSource的configureCell属性所期望的类型兼容:
configureCell
我个人更喜欢使用以下语法初始化dataSource.configureCell = { (_, tableView, indexPath, item) in
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
// Your configuration code goes here
return cell
}
:
SpringSystem