Observable的創建
常用的爲:deferred、of、just
- empty
//------ empty ------
//MARK: empty
//空序列,只能completed
let emptyOb = Observable<Int>.empty()
_ = emptyOb.subscribe(onNext: { (number) in
print("訂閱:", number)
}, onError: { (error) in
print("error:", error)
}, onCompleted: {
print("completed")
}, onDisposed: {
print("disposed")
})
- just
//------ just ------
//MARK: just
//單個信號序列
let array = ["a", "b", "c", "d", "e"]
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("completed")
}, onDisposed: {
print("disposed")
})
- of
//------ of ------
//MARK: of
//多個元素
Observable<String>.of("a", "b")
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
//字典
Observable<[String: Any]>.of(["name": "aa", "age": 18])
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
//數組
Observable<[String]>.of(["a", "b", "c"])
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
- from
//------ from ------
//MARK: from
//從集合中獲取序列,有可選項
Observable<[String]>.from(optional: ["a", "b"])
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
//------ deferred ------
//MARK: deferred
//根據條件判斷業務邏輯,根據業務選擇序列
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)
})
- range
//------ range ------
//MARK: range
//生成指定範圍內的可觀察整數序列
Observable.range(start: 2, count: 5)
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
- generate
//------ generate ------
//MARK: generate
//當所有條件都爲true時纔給出Observable序列,類似數組遍歷循環
Observable.generate(initialState: 0, //初始值
condition: { $0 < 10 }, //條件1
iterate: { $0 + 2 }) //條件2
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
//數組遍歷
let arr = ["aa", "bb", "cc", "dd", "ee", "ff"]
Observable.generate(initialState: 0,
condition: { $0 < arr.count },
iterate: { $0 + 1 })
.subscribe { (event) in
print(event)
}.disposed(by: disposeBag)
- timer
//------ timer ------
//MARK: timer
//para1:第一次響應距離現在的時間;para2:時間間隔;para3:線程
Observable<Int>.timer(5, period: 2, scheduler: MainScheduler.instance)
.subscribe { (event) in
print(event)
}
.disposed(by: disposeBag)
//沒有指定period,爲一次性執行
Observable<Int>.timer(2, scheduler: MainScheduler.instance)
.subscribe { (event) in
print(event)
}
.disposed(by: disposeBag)
- interval
//------ interval ------
//MARK: interval
//從當前時間開始
Observable<Int>.interval(2, scheduler: MainScheduler.instance)
.subscribe { (event) in
print(event)
}
.disposed(by: disposeBag)
- repeatElement
//------ repeatElement ------
//MARK: repeatElement
//創建一個可以無限發出給定元素的Event的Observable序列,永不終止
Observable<Int>.repeatElement(5)
.subscribe { (event) in
print(event)
}
.disposed(by: disposeBag)
- error
//------ error ------
//MARK: error
//發出錯誤信號
Observable<String>.error(NSError.init(domain: "error", code: 1002, userInfo: ["reason": "unknow"]))
.subscribe { (event) in
print(event)
}
.disposed(by: disposeBag)
- never
//------ never ------
//MARK: never
//創建永遠不會發出也不會終止的Observable序列;
//這種類型的響應源,在測試或者組合操作符中禁用確切的源很有用
Observable<String>.never()
.subscribe { (event) in
print(event)
}
.disposed(by: disposeBag)