更新一些常用的簡單操作符,后續(xù)還有一部分高階函數(shù)的探索
//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 單次信號序列 ,只會調(diào)用一次
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)
// 數(shù)組
Observable<[String]>.of(["琴","棋","書","畫"])
.subscribe{ eventin
print(event)
}.disposed(by: disposeBag)
}
//MARK: from
funcfromTest() {
//從集合中獲取序列:數(shù)組,集合,set 獲取序列 - 有可選項處理
Observable<[String]>.from(optional: ["刀","槍","棍","棒"])
.subscribe{ eventin
print(event)
}.disposed(by: disposeBag)
}
//MARK: defer
func deferredTest(){
// 動態(tài)序列 - 根據(jù)外界的標(biāo)識 - 動態(tài)輸出
// 這里兩次訂閱,通過外界的值來 選擇性的輸出不同的結(jié)果
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(){
// 傳入開始值和數(shù)量,生成從開始值后面數(shù)量個的整數(shù)
Observable.range(start:11,count:15)
.subscribe{ eventin
print(event)
}.disposed(by: disposeBag)
}
//MARK: generate
func generateTest(){
// 遍歷循環(huán),int i = 1 ;i < 10 ; i += 3 print(i)
// 只有兩個值都為true的時候,輸出這個序列
// 利用generate可以實現(xiàn)數(shù)組的遍歷
// i 用來做數(shù)組的下標(biāo) condition $0 < 數(shù)組的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的區(qū)別就是,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(){
// 一直持續(xù)發(fā)出給定元素,除非disposeBag回收,否則不會停止
// 實用場景,例如打飛機(jī)中的子彈,飛機(jī)不爆,子彈不停
Observable.repeatElement("大")
.subscribe{ eventin
print(event)
}.disposed(by: disposeBag)
}
//MARK: error
func errorTest(){
// 發(fā)送一個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(){
// 永遠(yuǎn)不會發(fā)出event的一個序列, Observable 不會產(chǎn)生任何事件
// 等價于
// Observable.create { observer in
// return Disposables.create()
// }
Observable.never()
.subscribe{ eventin
print("一動不動是什么", event)
}
.disposed(by: disposeBag)
}