RxTableViewSectionedReloadDataSource

Это табличное представление в RxSwift. Я не могу настроить источник данных. Кажется, что для RxTableViewSectionedReloadDataSource отсутствуют параметры, хотя это странно, поскольку я следую точно такому же источнику кода в официальных документах

Ошибка XCode Всякий раз, когда я нажимаю ввод, чтобы автозаполнить закрытие. Закрытие остается пустым.

Я не знаю, как решить эту проблему

  let dataSource = RxTableViewSectionedReloadDataSource<SectionModel>() 



dataSource?.configureCell = { (ds: RxTableViewSectionedReloadDataSource<SectionOfCustomData>, tv: UITableView, ip: IndexPath, item: Article) -> NewsFeedCell in
                let cell = tv.dequeueReusableCell(withIdentifier: "Cell", for: ip) as! NewsFeedCell
                cell.configure(news: item)
                return cell
            }
            dataSource?.titleForHeaderInSection = { ds, index in
                return ds.sectionModels[index].header
            }

    let sections = [
        SectionOfCustomData(header: "First section", items: self.articles),
        SectionOfCustomData(header: "Second section", items: self.articles)
        ]

            guard let dtSource = dataSource else {
                return
            }
            Observable.just(sections)
                .bind(to: tableView.rx.items(dataSource: dtSource))
                .disposed(by: bag)

        }

SectionModel.swift

import Foundation
import RxSwift
import RxCocoa
import RxDataSources

struct SectionOfCustomData {
    var header: String
    var items: [Item]
}
extension SectionOfCustomData: SectionModelType {
    typealias Item = Article

    init(original: SectionOfCustomData, items: [Item]) {
        self = original
        self.items = items
    }
}

1 ответ

Ваш код выглядит нормально, это может быть проблема с версией, как предлагается в комментарии, но вы можете легко решить ее, переместив конфигурации в init следующим образом:

let dataSource = RxTableViewSectionedReloadDataSource<SectionModel>(
        configureCell: { (ds, tv, ip, item) -> NewsFeedCell in
            let cell = tv.dequeueReusableCell(withIdentifier: "Cell", for: ip) as! NewsFeedCell
            cell.configure(news: item)
            return cell
        },
        titleForHeaderInSection: { ds, index in
            return ds.sectionModels[index].header
        })

Все остальное должно быть таким же

Объявить вас глобальным dataSource как необязательный var:

var dataSource = RxTableViewSectionedReloadDataSource<SectionModel>?

Я предполагаю, что вы настраиваете ячейку в viewDidLoadтак:

let dataSource = RxTableViewSectionedReloadDataSource<SectionModel>(configureCell: { (ds: RxTableViewSectionedReloadDataSource<SectionOfCustomData>, tv: UITableView, ip: IndexPath, item: Article) -> NewsFeedCell in
                let cell = tv.dequeueReusableCell(withIdentifier: "Cell", for: ip) as! NewsFeedCell
                cell.configure(news: item)
                return cell
            }
            dataSource?.titleForHeaderInSection = { ds, index in
                return ds.sectionModels[index].header
            })

И вот ключевая часть:

self.dataSource = dataSource
Другие вопросы по тегам