如何摆脱 RxSwift 中变量的初始值
How to get rid of initial value of Variable in RxSwift
我一直在研究 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
.
的一个非常基本的问题
非常感谢您对此的看法。
首先,Variable 在 RxSwift 4.x 中被弃用,取而代之的是 BehaviorRelay.
但为了您的目的,PublishSubject 或 BehaviorSubject(如果您需要缓存最新值)就足够了。
我一直在研究 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
.
非常感谢您对此的看法。
首先,Variable 在 RxSwift 4.x 中被弃用,取而代之的是 BehaviorRelay.
但为了您的目的,PublishSubject 或 BehaviorSubject(如果您需要缓存最新值)就足够了。