更新一些常用的简单操作符,后续还有一部分高阶函数的探索
//MARK: empty
funcemptyTest() {
//empty() 空判断,判断序列是否为空
letemptyObservable =Observable.empty()
emptyObservable.subscribe{ numberin
print("empty - number = \(number)")
}onError: { errorin
print(error)
}onCompleted: {
print("completed")
} onDisposed: {
print("release!")
}
.disposed(by: disposeBag)
emptyObservable.subscribe{ numberin
print("empty - number = \(number)")
}.disposed(by: disposeBag)
emptyObservable.subscribe(onNext: {numberin
print("empty - number = \(number)")
}).disposed(by: disposeBag)
}
//MARK: just
funcjustTest() {
// just 单次信号序列 ,只会调用一次
letarray = ["A","B","C"]
letjustObservable =Observable<[String]>.just(array)
justObservable.subscribe{eventin
print(event)
}
.disposed(by: disposeBag)
justObservable.subscribe{ sArrayin
print(sArray)
}onError: { errorin
print(error)
}onCompleted: {
print("completed")
} onDisposed: {
print("release!")
}.disposed(by: disposeBag)
justObservable.subscribe(onNext: {sArrayin
print("subscribe(onNext: \(sArray)")
}).disposed(by: disposeBag)
}
//MARK: of 多个元素的处理,
funcofTest() {
// 单个元素
Observable.of("A","B","C")
.subscribe{ eventin
print(event)
}
.disposed(by: disposeBag)
// 字典
Observable<[String:Any]>.of(["name":"H_Max","age":29,"length":18.5])
.subscribe{eventin
print(event)
}
.disposed(by: disposeBag)
// 数组
Observable<[String]>.of(["琴","棋","书","画"])
.subscribe{ eventin
print(event)
}.disposed(by: disposeBag)
}
//MARK: from
funcfromTest() {
//从集合中获取序列:数组,集合,set 获取序列 - 有可选项处理
Observable<[String]>.from(optional: ["刀","枪","棍","棒"])
.subscribe{ eventin
print(event)
}.disposed(by: disposeBag)
}
//MARK: defer
func deferredTest(){
// 动态序列 - 根据外界的标识 - 动态输出
// 这里两次订阅,通过外界的值来 选择性的输出不同的结果
varisOne =true
letob =Observable.deferred{() ->Observablein
isOne = !isOne
guardisOneelse{
returnObservable.of(1,2,3,4,5)
}
returnObservable.of(10,9,8,7,6)
}
ob.subscribe{ eventin
print(event)
}.disposed(by: disposeBag)
ob.subscribe{ evnetin
print(evnet)
}
.disposed(by: disposeBag)
}
//MARK: rang
func rangeTest(){
// 传入开始值和数量,生成从开始值后面数量个的整数
Observable.range(start:11,count:15)
.subscribe{ eventin
print(event)
}.disposed(by: disposeBag)
}
//MARK: generate
func generateTest(){
// 遍历循环,int i = 1 ;i < 10 ; i += 3 print(i)
// 只有两个值都为true的时候,输出这个序列
// 利用generate可以实现数组的遍历
// i 用来做数组的下标 condition $0 < 数组的count iterate $0 + 1
// 订阅的话 event.element 或者用 subscribe(onNext:{})订阅
Observable.generate(initialState: 1,
condition: {$0 <10},
iterate: {$0 +3})
.subscribe{ eventin
print(event)
}.disposed(by: disposeBag)
}
//MARK: interval && timer
func intervalTest(){
// 定时器
// timer 和 interval的区别就是,timer多了一个初始延迟
Observable<Int>.interval(.seconds(2), scheduler: MainScheduler.instance)
.subscribe{ eventin
print(event)
}.disposed(by: disposeBag)
Observable.timer(.seconds(10),period: .seconds(1),scheduler:MainScheduler.instance)
.subscribe{ eventin
print(event)
}.disposed(by: disposeBag)
}
//MARK: repeatElement
func repeatElementTest(){
// 一直持续发出给定元素,除非disposeBag回收,否则不会停止
// 实用场景,例如打飞机中的子弹,飞机不爆,子弹不停
Observable.repeatElement("大")
.subscribe{ eventin
print(event)
}.disposed(by: disposeBag)
}
//MARK: error
func errorTest(){
// 发送一个error的信号,直接在onError 中可以接收到
Observable.error(NSError.init(domain:"error",code:9999,userInfo: ["reason":"unknow"]))
.subscribe{ strin
print(str)
}onError: { errorin
print("error9999 = \(error)")
}onCompleted: {
print("completed")
} onDisposed: {
}.disposed(by: disposeBag)
// .subscribe { event in
// print("订阅:", event)
// }
// .disposed(by: disposeBag)
}
//MARK: never
func neverTest(){
// 永远不会发出event的一个序列, Observable 不会产生任何事件
// 等价于
// Observable.create { observer in
// return Disposables.create()
// }
Observable.never()
.subscribe{ eventin
print("一动不动是什么", event)
}
.disposed(by: disposeBag)
}