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