如何摆脱 RxSwift 中变量的初始值

How to get rid of initial value of Variable in RxSwift

我一直在研究 RxSwift,我在 RxSwift 中使用 Variable,它挂钩(绑定)到 UICollectionView。现在知道 VariableBehavior 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    
})

虽然上面的代码有效,但它部分解决了问题。尽管 myArrayvalue 中的第一个更改被忽略,但是当我稍后使用

将实际数据附加到 myArray
myArray.value.append(someNewData)

它发出通知,不幸的是这次 myArray.value 有两个值(我在初始化时添加的虚拟值和一个实际触发的值 onNext

因此,作为变通方法,我所做的是在盲目地将数据附加到 myArray.value 之前,我检查它是否有我添加的虚拟对象,如果有,我将其删除并添加实际对象。

虽然解决方法可行,但使我的代码看起来非常丑陋并且在某种程度上不是 Rx。我相信必须有一种适当的方法来处理它,因为它是使用 Variable.

的一个非常基本的问题

非常感谢您对此的看法。

首先,Variable 在 RxSwift 4.x 中被弃用,取而代之的是 BehaviorRelay.

但为了您的目的,PublishSubjectBehaviorSubject(如果您需要缓存最新值)就足够了。