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>

它让生活更轻松。