RxSwift, MVVM - Невозможно реализовать методы UITableViewDataSource с привязкой RxSwift

Я реализую простой UITableView адресов с помощью RxSwift и MVVM. Я создал такую ​​привязку в своем контроллере представления.

viewModel.addressList.asDriver()
   .drive(tableView.rx_itemsWithCellIdentifier(reusableIdentifier, cellType: SavedAddressTableViewCell.self)) { [weak self] (row, viewModel, cell) in
        self?.setUpAddressCell(cell, row: (row + 1))
    }
    .addDisposableTo(disposeBag)

Однако я продолжаю получать эту ошибку, когда пытаюсь открыть страницу в своем приложении.

Maybe delegate was already set in `xib` or `storyboard` and now it's being overwritten in code.

Я погуглил и обнаружил, что мне нужно установить для tableView.delegate и tableView.dataSource значение nil.

Однако есть некоторые методы UITableViewDataSource, которые мне все еще нужны, например

canEditRowAtIndexPath
commitEditingStyle

для удаления адресов.

Как мне это реализовать? Заранее спасибо.


person Oscar Orcas    schedule 13.01.2017    source источник


Ответы (2)


Напишите эту строку выше:

tableView.dataSource = nil
person xandrefreire    schedule 15.01.2017
comment
Ах нет, это не сработает. Это поможет вам заполнить свои ячейки, но не поможет вам реализовать функции анимации удаления, о которых я упоминал выше. - person Oscar Orcas; 16.01.2017
comment
Затем вы захотите использовать RxDataSources или проверьте это rx-example - person xandrefreire; 16.01.2017
comment
Собственно, я и сам не мог найти альтернативного решения. Спасибо чувак! - person Oscar Orcas; 16.01.2017

Хорошо, я нашел решение.

Используйте RxDataSources.

https://github.com/RxSwiftCommunity/RxDataSources

Я действительно не хотел использовать для этого новый модуль, но я не мог найти альтернативного решения.

Хорошо, теперь я нашел альтернативное решение!

Использовать

tableView.rx_itemDeleted

Эта функция является оболочкой ReactSwift для commitEditingStyle (вводит в заблуждение да!), Все, что вы написали бы в commitEditingStyle, теперь вы можете написать в этой функции. Для canEditRowAtIndexPath я всегда хотел вернуть true, которое является возвращаемым значением по умолчанию, даже если я не пишу для этого код, поэтому мне вообще не пришлось реализовывать canEditRowAtIndexPath!

person Oscar Orcas    schedule 16.01.2017