empty
序列事件是Int類型的,這里調(diào)用emty函數(shù) 沒有序列,只能complete
let emtyOb = Observable<Int>.empty()
_ = emtyOb.subscribe(onNext: { (number) in
print("訂閱:",number)
}, onError: { (error) in
print("error:",error)
}, onCompleted: {
print("完成回調(diào)")
}) {
print("釋放回調(diào)")
}
//打印 完成回調(diào) 釋放回調(diào)
just
單個信號序列創(chuàng)建,訂閱一次數(shù)據(jù)后立刻自動調(diào)用completed,銷毀內(nèi)存
let array = ["AAA","BBB"]
Observable<[String]>.just(array)
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
_ = Observable<[String]>.just(array).subscribe(onNext: { (number) in
print("訂閱:",number)
}, onError: { (error) in
print("error:",error)
}, onCompleted: {
print("完成回調(diào)")
}) {
print("釋放回調(diào)")
}
//打印
//next(["AAA", "BBB"])
//completed
//訂閱: ["AAA", "BBB"]
//完成回調(diào)
//釋放回調(diào)
of
針對多個元素的序列處理
Observable<String>.of("AAA","BBB")
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
let ob = Observable<String>.of("AAA","BBB")
_ = ob.subscribe(onNext: { (element) in
print(element)
}, onCompleted: {
print("完成回調(diào)")
}, onDisposed: {
print("釋放回調(diào)")
})
********of********
//next(AAA)
//next(BBB)
//completed
//訂閱(AAA)
//訂閱(BBB)
//完成回調(diào)
//釋放回調(diào)
from
從集合中獲取序列: 數(shù)組,集合,set 獲取序列 - 有可選項處理 - 更安全
Observable<[String]>.from(optional: ["AAA","BBB"])
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
defferd()
使用deferred()方法延遲Observable序列的初始化搁吓,通過傳入的block來實現(xiàn)Observable序列的初始化并且返回她君。
var isOdd = true
_ = Observable<Int>.deferred { () -> Observable<Int> in
// 這里設計我們的序列
isOdd = !isOdd
if isOdd {
return Observable.of(1,3,5,7,9)
}
return Observable.of(0,2,4,6,8)
}
.subscribe { (event) in
print(event)
}
//next(0)
//next(2)
//next(4)
//next(6)
//next(8)
//completed
range
生成指定范圍內(nèi)的可觀察整數(shù)序列
Observable.range(start: 2, count: 5)
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
//打印
//next(2)
//next(3)
//next(4)
//next(5)
//next(6)
//completed
generate
該方法創(chuàng)建一個只有當提供的所有的判斷條件都為 true 的時候阳液,才會給出動作的 Observable 序列刀森。初始值給定 然后判斷條件1 再判斷條件2 會一直遞歸下去,直到條件1或者條件2不滿足,類似for循環(huán)遍歷數(shù)組
Observable.generate(initialState: 0,// 初始值
condition: { $0 < 10}, // 條件1
iterate: { $0 + 2 }) // 條件2 +2
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
//打印
//next(0)
//next(2)
//next(4)
//next(6)
//next(8)
//completed
let arr = ["AAA_1","AAA_2","AAA_3","AAA_4","AAA_5","AAA_6","AAA_7","AAA_8","AAA_9","AAA_10"]
Observable.generate(initialState: 0,// 初始值
condition: { $0 < arr.count}, // 條件1
iterate: { $0 + 1 }) // 條件2 +2
.subscribe(onNext: {
print("遍歷arr:",arr[$0])
})
.disposed(by: disposeBag)
timer實現(xiàn)的登錄按鈕發(fā)送驗證碼功能贪惹,利用takeUntil ()函數(shù)為閉包返回true時發(fā)送完成
// 第一次參數(shù):第一次響應距離現(xiàn)在的時間 也就是延遲幾秒處罰
// 第二個參數(shù):時間間隔
// 第三個參數(shù):線程
let timer = Observable<Int>.timer(1, period: 1, scheduler: MainScheduler.instance)
.takeUntil(.exclusive, predicate: { (num) -> Bool in
if (num == self.countDownSeconds+1) {
return true
}else{
return false
}
})
.map{self.countDownSeconds - $0}
.filter { $0 >= 0 }
.asObservable()
let second = btn.rx.tap.flatMapLatest { _ -> Observable<Int> in
return timer
}
second.map { $0 == 0 ? "發(fā)送驗證碼":"再次發(fā)送(\($0)s)"}.bind(to: self.btn.rx.title()).disposed(by: disposeBag)
second.map{ $0 == 0 ? true : false }.bind(to: self.btn.rx.isEnabled).disposed(by: disposeBag)
timer.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
next(10)
next(9)
next(8)
next(7)
next(6)
next(5)
next(4)
next(3)
next(2)
next(1)
next(0)
completed