2017-03-09 60 views
0

我想使用RxSwift/RxDataSource與TableView,但我不能使用現有函數分配configureCell。下面的代碼:RxSwift DataSource 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: Cannot assign value of type '(TableViewSectionedDataSource, UITableView, IndexPath, TableSectionModel.Item) -> UITableViewCell!' to type '(TableViewSectionedDataSource, UITableView, IndexPath, TableSectionModel.Item) -> UITableViewCell!'

錯誤是在行

dataSource.configureCell = cell

拋出你有什麼想法?

感謝

+0

放數據源和ViewModel中的部分對象:) – denis631

回答

0

你只需要從細胞方法的返回類型UITableViewCell!刪除!

func cell(ds: TableViewSectionedDataSource<TableSectionModel>, tableView: UITableView, indexPath: IndexPath, item: TableSectionModel.Item) -> UITableViewCell { 
    return UITableViewCell() 
} 

這樣你的函數成爲類型與類型由RxDataSource的configureCell財產有望兼容:

public typealias CellFactory = (TableViewSectionedDataSource<S>, UITableView, IndexPath, I) -> UITableViewCell 

我個人更喜歡初始化configureCell的語法如下:

dataSource.configureCell = { (_, tableView, indexPath, item) in 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 
    // Your configuration code goes here 
    return cell 
}