无法使用rxdatasources swift从tableview中删除单元格

时间:2017-08-29 22:06:41

标签: ios swift uitableview reactive rxdatasources

我有一个tableview,我在视图模型中填充一些数据,我正在使用RxSwift和RxDataSources ......我有下一个代码

  enum TableViewEditingCommand {
    case DeleteItem(IndexPath)
  }

struct SectionedTableViewState {
    fileprivate var sections: [MySectionViewModel]

    init(sections: [MySectionViewModel]) {
        self.sections = sections
    }

    func execute(command: TableViewEditingCommand) -> SectionedTableViewState {
        switch command {

        case .DeleteItem(let indexPath):

            var sections = self.sections
            var items = sections[indexPath.section].items

            items.remove(at: indexPath.row)
            sections[indexPath.section] = MySectionViewModel(original: sections[indexPath.section], items: items)
            return SectionedTableViewState(sections: sections)
        }
    }
}

我的视图控制器有这样的东西

    class MyViewController : UIViewController { 
       let dataSource = RxTableViewSectionedAnimatedDataSource<MySectionViewModel>()

      override func viewDidLoad() {
            super.viewDidLoad() 

       viewModel.findElements()
                .bindTo(tableView.rx.items(dataSource:dataSource))
                .addDisposableTo(disposeBag)

     dataSource.configureCell = { datasource, tableView, indexPath, item in
         .... my configuration
      }

  dataSource.canEditRowAtIndexPath = { _ in true}

  let deleteCommand = tableView.rx.itemDeleted.asObservable()
            .map(TableViewEditingCommand.DeleteItem)

  let initialState = SectionedTableViewState(sections:dataSource.sectionModels)

Observable.of(deleteCommand)
            .merge()
            .scan(initialState) { (state: SectionedTableViewState, command: TableViewEditingCommand) -> SectionedTableViewState in
                return state.execute(command: command)
            }
            .startWith(initialState)
            .map {
                $0.sections
            }
            .shareReplay(1)
            .bindTo(tableView.rx.items(dataSource: dataSource))
            .addDisposableTo(disposeBag)


}



    }

似乎就在这一行

let initialState = SectionedTableViewState(sections:dataSource.sectionModels)

sections是一个空数组,因为我得到一个索引输出范围异常,当我打印数组时,它没有任何元素。我的问题是如何从数据源中获取部分?

我看过这个网址的例子:  https://github.com/RxSwiftCommunity/RxDataSources/blob/master/Example/Example3_TableViewEditing.swift

提前致谢。

0 个答案:

没有答案