pab*_*ros 8 ios swift rx-swift reactivex
要RxSwift在Swift 2中创建一个可观察的数组,我用它来做:
[1, 2, 3].toObservable().subscribeNext { print($0) }
Run Code Online (Sandbox Code Playgroud)
但是在Swift 3中,它不再起作用了,我收到了这个错误:
类型'[Int]'的值没有成员'toObservable'
如何RxSwift从swift数组创建一个可观察的数组?
iwi*_*not 15
的toObservable阵列到可观察的构造被弃用.
使用from运算符来创建冷可观察量:
let stream : Observable<Int> = Observable.from([1,2,3])
Run Code Online (Sandbox Code Playgroud)
或者,如果需要将整个数组作为条目,请使用just运算符创建冷可观察对象.
let singleEmissionStream : Observable<[Int]> = Observable.just([1,2,3])
Run Code Online (Sandbox Code Playgroud)
调用
fromorjust运算符时数组的元素将是onNext事件的最终排放集,并以事件结束onCompleted.对数组的更改将不会被识别为此可观察序列的新事件.
这意味着如果您不需要监听该数组的更改,则可以使用just和from运算符来创建observable.
要观察数组上的更改[E],您需要使用像RxSwift单元这样的热观察,如Variablek8mil的答案中所指定的.您将拥有一个类型实例,Variable<[E]>其中每个onNext发射都是阵列的当前状态.
在RxSwift和reactivex.io的文档中解释了冷观察和热观察之间的区别.以下是与热观测值相比较的冷观测值的简短描述.
Cold Observables在订阅时开始运行,即,当调用Subscribe时,可观察序列仅开始向观察者推送值.[...]这与热观察不同,例如鼠标移动事件或股票代码,即使在订阅激活之前,它们已经产生了价值.
在from和just当代码运行,从而最终确定该组的排放,将火其可观察到的序列,无论当它被订阅的运营商采取阵列的当前状态.这就是为什么稍后对数组中元素集的更改不会改变在使用fromor just运算符创建observable期间被识别为排放的元素集.
kam*_*soc 10
在Swift 3中使用RxSwift 3.0我会这样做:
var array: Variable<[Int]> = Variable([1, 2, 3])
array.asObservable().subscribe(onNext: {
updatedArray in
print(updatedArray)
})
array.value.append(4) // it will trigger `onNext` event
Run Code Online (Sandbox Code Playgroud)
所以主要区别在于您必须创建一个Variable对象而不是使用显式数组.
| 归档时间: |
|
| 查看次数: |
13902 次 |
| 最近记录: |