RX是通过序列来实现的序列
- 有限序列(执行一次或者N次)
- 无限序列(循环执行:timer 实现)
observable可观察序列 生命周期
1. 与数字相关的序列
- empty 0
- just 1
- of N
//只能订阅到 competed
var ob2 = Observable<Any>.empty().subscribe { Anystring in
print(Anystring)
}.disposed(by: disposebag)
//能订阅1个元素,just(elment )
var ob4 = Observable<Any>.just(array).subscribe { array in
print("value\(array)")
}.disposed(by: disposebag)
打印结果:
valuenext([2, 4, 7, 9, 3, 6, 1])
valuecompleted
//能订阅 N 个元素,of(elment,emlemt1,elment2)
var ob4 = Observable<Any>.of(array,"234").subscribe { array in
print("value\(array)")
}.disposed(by: disposebag)
//打印结果:
// valuenext([2, 4, 7, 9, 3, 6, 1])
// valuenext(234)
// valuecompleted
2. 与集合相关的序列
- from 从一个序列中如Array/Dictionary/Set,创建一个新序列
- range 创建一个发出一系列整数的序列
var array = [2,4,7,9,3,6,1]
var ob1 = Observable.from(array).filter({
$0 > 4
}).subscribe({
value in
print("value\(value)")
}).disposed(by: disposebag)
var ob3 = Observable.from(array).map({
$0 * 2
}).subscribe({
value in
print("value\(value)")
}).disposed(by: disposebag)
//发出一系列整数的序列
var ob5 = Observable<Int>.range(start: 4, count: 4)
.subscribe { value in
print("range序列\(value)")
}.disposed(by: disposebag)
4. 计时器相关
func timerObserver()
{
//timer。timer延迟1s执行
// var timer = Observable<Int>.timer(.seconds(1), scheduler: MainScheduler.instance)
// .subscribe { value in
// print("订阅到了\(value)")
// } .disposed(by: disposebag)
//timer2。timer循环订阅 多了<period>计时器
// var timer2 = Observable<Int>.timer(.seconds(1),period: .seconds(1), scheduler: MainScheduler.instance)
// .subscribe { value in
// print("订阅到了\(value)")
// } .disposed(by: disposebag)
//timer3。timer换成interval 循环订阅 计时器不需要<period>
var timer3 = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
.subscribe { value in
print("订阅到了\(value)")
} .disposed(by: disposebag)
}
5. 条件序列 generate
func generatorObserver(){
var ob = Observable.generate(initialState: 10) {
$0 < 15
} iterate: {
$0 + 3
}.subscribe { value in
print("订阅到了\(value)")
}.disposed(by: disposebag)
/*
+7、+6、+5
订阅到了next(10)
+4
订阅到了next(10)
订阅到了next(14)
+3
订阅到了next(10)
订阅到了next(13)
+2
订阅到了next(10)
订阅到了next(12)
订阅到了next(14)
+1
订阅到了next(10)
订阅到了next(11)
订阅到了next(12)
订阅到了next(13)
订阅到了next(14)
*/
}
6. error 创建可观察序列,只发出错误信号
func errorObservable(){
let error = NSError(domain: "出错IP", code: 880, userInfo: nil)
//写法1 打印错误调onNext
// Observable<Any>.error(error).subscribe { value in
// print("订阅error到了\(value)")
// }
// .disposed(by: disposebag)
//写法2。打印错误走onError
Observable<Any>.error(error).subscribe { value in
print("订阅error到了\(value)")
}
onError: { error in
print("出错了\(error)")
}
.disposed(by: disposebag)
}
7. deferred 每订建新序:为每个订阅者创建新序列
func defferedObservable(){
var index = 1
let defferedOb = Observable<String>.deferred {
index += 1
print("index ---\(index)")
return Observable.create { observer in
observer.onNext("1")
observer.onNext("2")
observer.onCompleted()
return Disposables.create()
}
}
defferedOb.subscribe {
print("调用01:\($0)")
}.disposed(by: disposebag)
defferedOb.subscribe {
print("调用02:\($0)")
}.disposed(by: disposebag)
}
/*打印结果:
index ---2
调用01:next(1)
调用01:next(2)
调用01:completed
index ---3
调用02:next(1)
调用02:next(2)
调用02:completed*/
observeable 实现三步曲
- 创建序列
- 序列订阅
- 发送信号
- 创建匿名序列,保存序列的subscribeHandler闭包(以供后来订阅回调)
- 序列订阅事件(监听事件),创建匿名订阅者,保存事件的闭包(eventHandler)
- 序列调用subscribeHandler传入匿名订阅者(observer)
- 订阅者调用事件闭包,序列监听到事件的响应即
- 订阅者调用方法 即为(信号发送)
- 1、订阅者调用onNext方法,
- 2、序列响应on方法
- 3、on方法里面回调订阅的eventHandler里面的onNext方法,完成订阅方法的响应