1

我正在学习 RxSwift,我想将 RxDataSources 与 UICollectionView 一起使用,但没有显示任何内容,请告诉我哪里错了,谢谢;我的代码:

- - 模型 - -

struct Traveler {
    let name: String
    let avater: UIImage?
}

struct Travelers {
    var travelers: [Traveler]
}

extension Travelers: SectionModelType {
    typealias Item = Traveler

    var items: [Traveler] { return travelers }

    init(original: Travelers, items: [Traveler]) {
        self = original
        travelers = items
    }
}

- - 数据 - - -

let items = Variable<[Travelers]>([
            Travelers(travelers: [Traveler(name: "Bob", avater: UIImage(named: "pic1"))])
        ])

- - 看法 - - -

let disposeBag = DisposeBag()

let dataSources = RxCollectionViewSectionedReloadDataSource<Travelers>()

let viewModel = TravelerViewModel()

lazy var travelerCollectionView: UICollectionView = {
    let layout = UICollectionViewFlowLayout()
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    layout.scrollDirection = .horizontal
    layout.itemSize = CGSize(width: 44, height: 44)

    let travelerCollectionView = UICollectionView(frame: CGRect(x: 100, y: 100, width: 100, height: 100), collectionViewLayout: layout)
    travelerCollectionView.backgroundColor = .red
    travelerCollectionView.register(TravelerItemCell.self, forCellWithReuseIdentifier: TravelerItemCell.identifier)
    return travelerCollectionView
}()

override init(frame: CGRect) {
    super.init(frame: frame)
    addSubview(travelerCollectionView)

    viewModel.items.asObservable()
        .bind(to: travelerCollectionView.rx.items(dataSource: dataSources))
        .addDisposableTo(disposeBag)

    dataSources.configureCell = { (_, collection, indexPath, traveler) in
        let cell = collection.dequeueReusableCell(withReuseIdentifier: TravelerItemCell.identifier, for: indexPath) as! TravelerItemCell
        cell.setAvaterImage(avater: traveler.avater)
        return cell
    }
}

谢谢,我想用 UICollectionView 显示一些人的头像。

4

0 回答 0