RXSwift 在绑定数据时一直警告我 tableView.rx.items(dataSource) 不符合 RxTableViewDataSourceType
RXSwift kept warning me tableView.rx.items(dataSource) not conforming to RxTableViewDataSourceType when binding data
我正在尝试使用 RxTableViewSectionedAnimatedDataSource 实现一个 tableView,我设置了所有子类正确,当我尝试将 dataSource 绑定到我的 tableView 时,编译器不断警告我
实例方法'items(dataSource:)'要求'TableViewSectionedDataSource'符合'RxTableViewDataSourceType'
这是代码
let tableView = UITableView()
let dataSource = RxTableViewSectionedAnimatedDataSource<CustomSectionDataType>(configureCell: { dataSource, tableView, indexPath, item in
return UITableViewCell()
})
dataSource.titleForHeaderInSection = { (ds, section) in
let sectionModel = ds.sectionModels[section]
return sectionModel.header
}
let sectionDatas = [CustomSectionDataType(ID: "1", header: "test", items: ["WTF!"])]
let items = BehaviorRelay(value: [sectionDatas])
items
.bind(to: tableView.rx.items(dataSource: dataSource))
.disposed(by: self.disposeBag)
自定义部分Class
struct CustomSectionDataType {
var ID: String
var header: String
var items: [Item]
}
extension CustomSectionDataType: AnimatableSectionModelType {
typealias Item = String
typealias Identity = String
var identity: String {
return ID
}
init(original: CustomSectionDataType, items: [Item]) {
self = original
self.items = items
}
}
对于您的 items
类型,您的数组嵌套太深。
类型定义为 BehaviorRelay<[[CustomSectionDataType]]>
,而应为 BehaviorRelay<[CustomSectionDataType]>
。
此外,考虑使用类型别名而不是创建您自己的自定义类型:
typealias CustomSectionDataType = AnimatableSectionModel<String, String>
或者如果您有两个相同但 ID 不同的 headers,则:
struct CustomModel: IdentifiableType {
var identity: String
var header: String
}
typealias CustomSectionDataType = AnimatableSectionModel<CustomModel, String>
它让生活更轻松。
我正在尝试使用 RxTableViewSectionedAnimatedDataSource 实现一个 tableView,我设置了所有子类正确,当我尝试将 dataSource 绑定到我的 tableView 时,编译器不断警告我
实例方法'items(dataSource:)'要求'TableViewSectionedDataSource'符合'RxTableViewDataSourceType'
这是代码
let tableView = UITableView()
let dataSource = RxTableViewSectionedAnimatedDataSource<CustomSectionDataType>(configureCell: { dataSource, tableView, indexPath, item in
return UITableViewCell()
})
dataSource.titleForHeaderInSection = { (ds, section) in
let sectionModel = ds.sectionModels[section]
return sectionModel.header
}
let sectionDatas = [CustomSectionDataType(ID: "1", header: "test", items: ["WTF!"])]
let items = BehaviorRelay(value: [sectionDatas])
items
.bind(to: tableView.rx.items(dataSource: dataSource))
.disposed(by: self.disposeBag)
自定义部分Class
struct CustomSectionDataType {
var ID: String
var header: String
var items: [Item]
}
extension CustomSectionDataType: AnimatableSectionModelType {
typealias Item = String
typealias Identity = String
var identity: String {
return ID
}
init(original: CustomSectionDataType, items: [Item]) {
self = original
self.items = items
}
}
对于您的 items
类型,您的数组嵌套太深。
类型定义为 BehaviorRelay<[[CustomSectionDataType]]>
,而应为 BehaviorRelay<[CustomSectionDataType]>
。
此外,考虑使用类型别名而不是创建您自己的自定义类型:
typealias CustomSectionDataType = AnimatableSectionModel<String, String>
或者如果您有两个相同但 ID 不同的 headers,则:
struct CustomModel: IdentifiableType {
var identity: String
var header: String
}
typealias CustomSectionDataType = AnimatableSectionModel<CustomModel, String>
它让生活更轻松。