美文网首页Swift
RxDataSources 多数据源

RxDataSources 多数据源

作者: 小奉不在乎 | 来源:发表于2022-10-06 16:50 被阅读0次

    不多解释,直接上代码:

    //接口返回数据模型
    struct NewModel {
        var id: Int
        var title: String
        var content: String
        var hasMore: String
    }
    
    //设置多不一样模型
    struct NewMoreModel {
        var id: Int
        var title: String
        var content: String
        var description: String
    }
    
    //单元格类型
    enum NewModelsSectionItem {
        case single(model: NewModel)
        case more(model: NewMoreModel)
    }
    
    //主体
    struct NewCellModel {
        var header: String?
        var items: [NewModelsSectionItem]
    }
    
    
    extension NewCellModel: SectionModelType {
        
        typealias Item = NewModelsSectionItem
        
        init(original: NewCellModel, items: [Item]) {
            self = original
            self.items = items
        }
    }
    
    // 数据赋值
    dataSource = RxTableViewSectionedReloadDataSource<NewCellModel>(configureCell: { (_, _, indexPath, item) -> UITableViewCell in
    
        switch item {
        case let .single(model):
            let cell = UITableViewCell.init(style: .value1, reuseIdentifier: "cell1")
            cell.textLabel?.text = model.title
            return cell
        case let .more(moreModel):
            let cell = UITableViewCell.init(style: .value1, reuseIdentifier: "cell2")
            cell.textLabel?.text = moreModel.description
            return cell
        }
    })
    

    测试数据

     let items = Observable.just([
            NewCellModel(header: "header1",items: [
                            .single(model: NewModel(id: 0, title: "1", content: "", hasMore: "")),
                            .single(model: NewModel(id: 1, title: "2", content: "", hasMore: "")),
                            .single(model: NewModel(id: 2, title: "3", content: "", hasMore: "")),
                            .more(model: NewMoreModel(id: 4, title: "4", content: "", description: "more1")),
                            .more(model: NewMoreModel(id: 4, title: "5", content: "", description: "more2")),
                            .more(model: NewMoreModel(id: 4, title: "6", content: "", description: "more3"))
            ]),
            NewCellModel(header: "header2",items: [
                            .single(model: NewModel(id: 0, title: "1", content: "", hasMore: "")),
                            .single(model: NewModel(id: 1, title: "2", content: "", hasMore: "")),
                            .single(model: NewModel(id: 2, title: "3", content: "", hasMore: "")),
                            .more(model: NewMoreModel(id: 4, title: "4", content: "", description: "more1")),
                            .more(model: NewMoreModel(id: 4, title: "5", content: "", description: "more2")),
                            .more(model: NewMoreModel(id: 4, title: "6", content: "", description: "more3"))
            ])
        ])
    
    
    items.asDriver(onErrorJustReturn: [])
        .drive(tableView.rx.items(dataSource: dataSource))
        .disposed(by: disposeBag)
    

    相关文章

      网友评论

        本文标题:RxDataSources 多数据源

        本文链接:https://www.haomeiwen.com/subject/vfomartx.html