(*useful)标记:目前觉得有用的函数
//FIXME 标记:待补充
Observable:
主要介绍了 Rx 的基础: Observable 。 Observable<Element> 是观察者模式中被观察的对象,相当于一个事件序列 (GeneratorType) ,会向订阅者发送新产生的事件信息。事件信息分为三种:
.Next(value) 表示新的事件数据。
.Completed 表示事件序列的完结。
.Error 同样表示完结,但是代表异常导致的完结。
订阅(subscribe)事件的方式 (*useful)
隐式参数$0 , 不需要in
//-----独立订阅事件
.subscribe(onNext: { print($0) }, onError: { print($0) }, onCompleted: {})
.subscribe(onNext: { element in
print(element)
})
---------分割线--------
.subscribe { print($0) } //-----订阅全部事件
.subscribe({ (event) in
print(event)
})
发送(emit)事件的方式 (*useful)
observer.on(.next("🐶")) //--通过 .on(e: Event) 发送事件。
observer.onNext("🐶") //-- 通过 .onEvent(_:) 发送事件
闭包不会执行. 因为观察器没有被订阅(*useful)
_ = Observable<String>.create { observerOfString -> Disposable in
print("This will never be printed")
observerOfString.on(.next("😬"))
observerOfString.on(.completed)
return Disposables.create()
}
打印:
never:它不会终止,也不会发出任何事件(暂时没发现有什么用处
let disposeBag = DisposeBag()
let neverSequence = Observable<String>.never()
let neverSequenceSubscription = neverSequence
.subscribe { _ in
print("This will never be printed")
}
neverSequenceSubscription.disposed(by: disposeBag)
打印:
empty:只发出完成事件
let disposeBag = DisposeBag()
Observable<Int>.empty()
.subscribe { event in
print(event)
}
.disposed(by: disposeBag)
打印:
completed
just:用单个元素创建可观察的序列
let disposeBag = DisposeBag()
Observable.just("🔴")
.subscribe { event in
print(event)
}
.disposed(by: disposeBag)
打印:
next(🔴)
completed
of:创建一个具有固定数目元素的可观察序列。
let disposeBag = DisposeBag()
Observable.of("🐶", "🐱", "🐭", "🐹")
.subscribe(onNext: { element in
print(element)
})
.disposed(by: disposeBag)
打印:
🐶
🐱
🐭
🐹
from:从集合(数组、字典或集合)中创建可观察的序列
let disposeBag = DisposeBag()
var array = ["🐶", "🐱", "🐭", "🐹"]
Observable.from(array)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
array.append("newElement")
打印:(append后,并不会有输出。。。 //FIXME
🐶
🐱
🐭
🐹
create (*useful) 通过 .on(e: Event) 发送事件。
let disposeBag = DisposeBag()
let myJust = { (element: String) -> Observable<String> in
return Observable.create { observer in
observer.on(.next(element))
observer.on(.completed)
return Disposables.create()
}
}
myJust("🔴")
.subscribe { print($0) }
.disposed(by: disposeBag)
打印:
next(🔴)
completed
range 循环范围
let disposeBag = DisposeBag()
Observable.range(start: 1, count: 6)
.subscribe { print($0) }
.disposed(by: disposeBag)
打印:
next(1)
next(2)
next(3)
next(4)
next(5)
next(6)
completed
repeatElement: 重复无数次,由take()参数决定
take: 只获取序列中的前 n 个事件,在满足数量之后会自动 .Completed 。
let disposeBag = DisposeBag()
Observable.repeatElement("🔴")
.take(3)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
打印:
🔴
🔴
🔴
generate: 条件循环
let disposeBag = DisposeBag()
Observable.generate(
initialState: 0,
condition: { $0 < 3 },
iterate: { $0 + 1 }
)
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
打印:
0
1
2
deferred 通过 .onEvent(_:) 发送事件
let disposeBag = DisposeBag()
var count = 1
let deferredSequence = Observable<String>.deferred {
print("Creating \(count)")
count += 1
return Observable.create { observer in
print("Emitting...")
observer.onNext("🐶")
observer.onNext("🐱")
observer.onNext("🐵")
return Disposables.create()
}
}
deferredSequence
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
deferredSequence
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
打印:
Creating 1
Emitting...
🐶
🐱
🐵
Creating 2
Emitting...
🐶
🐱
🐵
error: 该序列不发出任何item,并立即以错误终止。
let disposeBag = DisposeBag()
Observable<Int>.error(TestError.test)
.subscribe { print($0) }
.disposed(by: disposeBag)
打印:
error(test)
doOn:可对同一事件做重复处理 (*useful)
Invokes a side-effect action for each emitted event and returns (passes through) the original event
let disposeBag = DisposeBag()
Observable.of("🍎", "🍐", "🍊", "🍋")
.do(onNext: { print("Intercepted:", $0) },
onError: { print("Intercepted error:", $0) },
onCompleted: { print("Completed") })
.subscribe(onNext: { print($0) })
.disposed(by: disposeBag)
打印:
Intercepted: 🍎
🍎
Intercepted: 🍐
🍐
Intercepted: 🍊
🍊
Intercepted: 🍋
🍋
Completed