我一直在研究RxSwift,我正在使用RxSwift中的Variable
,并将其与UICollectionView
绑定。现在知道Variable
是从Behavior Subjects
扩展而来的,所以我不得不创建一个带有一些虚拟初始值的Variable
。
var myArray = Variable<[MyDataModel]>([MyDataModel(data: "{:}")])
MyDataModel
是一个结构体,它以 json
作为初始化参数。(由于 MyModel 与接下来的问题无关,因此我在此不会发布其结构)
现在,当我将其连接到 collectionView 时,我知道应该忽略发出的第一个信号,因此我使用 skip(1)
。
myArray.asObservable().skip(1).bind(to: collectionView.rx.items(cellIdentifier: "test", cellType: MyCollectionViewCell.self){
//cell implementation
})
虽然上面的代码可以工作,但只是部分解决了问题。尽管 myArray
的 value
的第一个更改被忽略了,但当我稍后使用以下代码将实际数据附加到 myArray
时:
myArray.value.append(someNewData)
这段代码会发出通知,但不幸的是,这次 myArray.value
有两个值(一个是我初始化时添加的虚拟值,另一个是实际触发 onNext
的值)。
所以,作为解决方法,在将数据盲目追加到myArray.value
之前,我会检查它是否有我添加的虚拟对象,如果是,我会将其删除并添加实际对象。
虽然这种解决方法有效,但使我的代码看起来非常丑陋,而且在某种程度上与Rx无关。我相信在使用Variable
时应该有更好的解决方法,因为这是一个非常基本的问题。
我非常感谢您对此的想法。