RxSwift练习:https://github.com/flywo/RxSwiftPractice
toArray
//toArray:将一个被观察队列组装成一个数组,通过一个next方法,将该数组发送出去
let disposeBag = DisposeBag()
Observable.of("a", "b", "c")
.toArray()
.subscribe(onNext: {print($0)})
.disposed(by: disposeBag)
//["a", "b", "c"]
map
let formatter = NumberFormatter()
formatter.numberStyle = .spellOut
Observable<NSNumber>.of(123, 4, 56)
.map {formatter.string(from: $0) ?? ""}
.subscribe(onNext: {print($0)})
.disposed(by: disposeBag)
/*
one hundred twenty-three
four
fifty-six
*/
enumerated
Observable.of(1,2,3,4,5,6)
//生成index + element的元组
.enumerated()
.map{ index, integer in
index > 2 ? integer * 2 : integer
}
.subscribe(onNext: {print($0)})
.disposed(by: disposeBag)
/*
1
2
3
8
10
12
*/
flatMap
struct Student {
var score: BehaviorSubject<Int>
}
//flatMap
let a = Student(score: BehaviorSubject(value: 80))
let b = Student(score: BehaviorSubject(value: 90))
let student = PublishSubject<Student>()
student
.flatMap {$0.score}
.subscribe(onNext: {print($0)})
.disposed(by: disposeBag)
student.onNext(a)
//80
a.score.onNext(90)
//90
student.onNext(b)
//90
b.score.onNext(80)
//80
a.score.onNext(100)
//100
flatMapLatest
let student1 = PublishSubject<Student>()
//flatMapLatest保持最后的观察者和被观察者
student1
.flatMapLatest {$0.score}
.subscribe(onNext: {print($0)})
.disposed(by: disposeBag)
student1.onNext(a)
//80
a.score.onNext(90)
//90
student1.onNext(b)
//90
b.score.onNext(80)
//80
a.score.onNext(100)
//无
//改变发送的事件
let student1 = BehaviorSubject(value: a)
enum MyError: Error {
case anError
}
let studentScore = student1
//materialize
.flatMapLatest{$0.score.materialize()}
studentScore
.subscribe(onNext: {print($0)})
.disposed(by: disposeBag)
a.score.onNext(85)
a.score.onError(MyError.anError)
a.score.onNext(90)
student1.onNext(b)
/*
next(80)
next(85)
error(anError)
next(90)
*/