RxSwift tips – 多次订阅同一个信号

释放双眼,带上耳机,听听看~!
image.png

对同一个信号多次订阅会发生什么情况呢?我们来看看这段代码:

var start = 0
let getStartNumber: () -> Int = {
start += 1
return start
}
let numbers = Observable<Int>.create{
let start = getStartNumber()
$0.onNext(start)
$0.onNext(start + 1)
$0.onNext(start + 2)
$0.onCompleted()
return Disposables.create()
}
numbers
.subscribe(onNext: { (el) in
print("element [(el)]")
}, onCompleted: {
print("----------")
}).disposed(by: disposebag)
numbers
.subscribe(onNext: { (el) in
print("element [(el)]")
}, onCompleted: {
print("----------")
}).disposed(by: disposebag)
/*
element [1]
element [2]
element [3]
----------
element [2]
element [3]
element [4]
----------
*/

Rx 中的 Observables 是一个拉驱动的事件序列。

推驱动:在创建的时候,序列中的值不会被立即赋值,之后才会被赋值。(网络请求)

拉驱动:在创建信号的时候,序列中的值就会被确定下来,我们可以从流中一个一个的拿到值

对一个 Observable 使用各种操作符都不会产生什么实际的效果。一旦调用了 subscribe(...) 也就是说一旦有东西订阅了这个信号之后,它才会开始发出事件序列。

每次订阅这个信号, observable 都会执行 create 这个闭包。

上面代码最后的结果也是因为这个原因:

每一次调用subscribe(...) ,也就是订阅某个信号,都会给这次订阅创建新的信号。所以也很难保证每个都是一样的。

人已赞赏
iOS文章

最近很火的 Safe Area 到底是什么

2020-4-28 9:03:04

iOS文章

iOS获取网络图片的大小

2020-4-28 10:18:01

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索