繁体   English   中英

如何摆脱RxSwift中Variable的初始值

[英]How to get rid of initial value of Variable in RxSwift

我一直在RxSwift上工作,我在RxSwift中使用了一个Variable ,该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是一个非常基本的问题。

我真的很感谢您对同样的想法。

首先,在RxSwift 4.x中不推荐使用Variable,而推荐使用BehaviorRelay

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM