flatMap
将一个sequence转换为一个sequences,当你接收一个sequence的事件,你还想接收其他sequence发出的事件的话可以使用flatMap,她会将每一个sequence事件进行处理以后,然后再以一个sequence形式发出事件
let stu1 = Student(score: Variable(80))
let stu2 = Student(score: Variable(100))
let student = Variable(stu1)
student.asObservable().flatMap { (stu: Student) -> Observable<Double> in
return stu.score.asObservable()
}.subscribe { (event) in
print(event)
}.addDisposableTo(bag)
student.value = stu2
stu1.score.value = 10
stu2.score.value = 20
/* 输出顺序为:
next(80.0)
next(100.0)
next(10.0)
next(20.0)
completed
*/
flatMapLatest
flatMapLatest只会接收最新的value事件,将上例代码改为flatMapLatest
let stu3 = Student(score: Variable(70))
let stu4 = Student(score: Variable(60))
let student1 = Variable(stu3)
student1.asObservable().flatMapFirst { (stu) -> Observable<Double> in
return stu.score.asObservable()
}.subscribe { (event: Event<Double>) in
print(event)
}.addDisposableTo(bag)
student1.value = stu4
stu3.score.value = 10
stu4.score.value = 20
/* 输出顺序为:
next(70.0)
next(10.0)
completed
*/
网友评论