3

RxSwiftモデル配列をコレクションビューにバインドするために使用しています

特定の indexPath からモデル オブジェクトを取得するにはどうすればよいですか?

私は次のようにバインディングを行っています:

vm.bikeIssueCatagories()
        .drive(self.collectionView.rx.items(cellIdentifier: "BikeIssueCategoryCollectionViewCell", cellType: UICollectionViewCell.self)) { row, data, cell in
        }.disposed(by: disposeBag)

私の問題の核心は、ユーザーが選択したモデル オブジェクトとセルの両方を取得する必要があるということです。のみを使用collectionView.rx.modelSelected(T.self)すると、モデル og type が得られますT。そして呼び出すとcollectionView.rx.itemSelected、選択したものだけが得られますIndexPath

collectionView.rx.itemSelected.asDriver()
        .driveNext { [unowned self] indexPath in
            guard let model = try? collectionView.rx.model(at: indexPath) else { return }
            guard let cell = self.collectionView.cellForItem(at: indexPath) else { return }
        }.disposed(by: disposeBag)

しかし、indexPath でモデルにアクセスしようとすると、エラーが発生します。

タイプ「inout UICollectionView」はプロトコル「ReactiveCompatible」に準拠していません

ただ試している:

let indexPath = IndexPath.init()
self.collectionView.rx.model(at: indexPath)

エラーも表示されます:

メンバー 'model(at:)' へのあいまいな参照

SO ...モデルオブジェクトとユーザーが選択したセルの両方を取得する方法は?

4

3 に答える 3

1

ViewModel は methodbikeIssueCatagories()を定義します。これは、UIViewController が UICollectionView をバインドするものです。モデルを正しい位置に配置するには、itemSelected言及したプロパティを使用できます。これによりObservable<IndexPath>、ViewModel にフィードする必要がある が得られます。ここで、IndexPath のitemプロパティを使用して、データ配列 ( で指定bikeIssueCatagories()) から探しているモデルを特定できます。modelSelectedプロパティはデータソースを既に認識しているため、これを簡単に行うことができます。そのため、指定する必要があるのはモデルのタイプだけです ( に置き換えますT.self) YourModelName.self

セルへの参照も必要な理由はわかりませんが、必要な場合は、cellForItem(at:)on で使用できますUICollectionView(を介して取得した IndexPath をフィードしitemSelectedます)。

于 2017-10-22T22:55:34.853 に答える