- RxSwift Transforming Operators
- RxSwift - Transforming Operators
- Transforming Operators of flatMa
- RxSwift(三)----Operators
- RxSwift文档翻译4-- Transforming Oper
- Rx Transforming Operators of Map
- 六、转变操作-Transforming Operators(R
- RxSwift_v1.0笔记——11: Time Based O
- RxSwift 小记-Transforming Operator
- RxSwift Combination Operators
Transforming elements
1.把单个元素的可观察值转化成一个数组, 并将包含该数组的.next事件发送给订阅者。
屏幕快照 2017-08-15 下午2.15.27.png let disposeBag = DisposeBag()
Observable.of("A", "B", "C")
// 把单个元素转化成数组
.toArray()
.subscribe(onNext: {
print($0)
})
.addDisposableTo(disposeBag)
打印["A", "B", "C"]
- map操作符和Swift中的map是相似的, 会把集合里的元素一次取出来
let disposeBag = DisposeBag()
let formatter = NumberFormatter()
formatter.numberStyle = .spellOut
Observable<NSNumber>.of(123, 4, 56)
.map {
formatter.string(from: $0) ?? ""
}
.subscribe(onNext: {
print($0)
})
.addDisposableTo(disposeBag)
-
mapWithIndex 操作符与takeWhile很相似, takeWhile是返回了true或false, 而mapWithIndex 在返回真假的同时还能进行传进来的值得操作, 下图中mapWithIndex的索引大于1,将通过将元素乘以2来转换元素,否则它将按原样传递元素,因此只有第3个元素被转换。
屏幕快照 2017-08-15 下午2.28.35.png
let disposeBag = DisposeBag()
Observable.of(1, 2, 3, 4, 5, 6)
// 索引大于2才能被通过进行转化, 否则原样返回
.mapWithIndex { integer, index in
index > 2 ? integer * 2 : integer
}
.subscribe(onNext: {
print($0)
})
.addDisposableTo(disposeBag)
Transforming inner observables
flatMap
FlatMap的作用是把一个可观察的对象转化成另外一个可观察的对象, 磁力中就是把可观察结构体student的score转化成另外一个可观察对象
struct Student {
var score: Variable<Int>
var name: Variable<String>
}
example(of: "flatMap") {
let disposeBag = DisposeBag()
let ryan = Student(score: Variable(80), name:Variable("A"))
let charlotte = Student(score: Variable(90), name:Variable("B"))
let student = PublishSubject<Student>()
student.asObservable()
.flatMap {
//flatMap, 是把发射对象转成另外一个Observable,进而把这个Observable发射的对象发射出去
//如果把此处的score改为name, 则不会打印分数, 只会打印A,B
$0.score.asObservable()
}
.subscribe(onNext: {
print("\($0) --")
})
.addDisposableTo(disposeBag)
student.onNext(ryan)
ryan.score.value = 85
student.onNext(charlotte)
ryan.score.value = 95
charlotte.score.value = 100
}
flatMapLatest
flatMapLatest和flatMap类似, 但是flatMapLatest会自动转化观察者, 当对A进行观察时, 关于A的一些修改, 会被接收到, 但是如果要观察的对象改为B, 则会放弃对A的观察, 而不是A和B都会被观察到.
example(of: "flatMapLatest") {
let disposeBag = DisposeBag()
let ryan = Student(score: Variable(80))
let charlotte = Student(score: Variable(90))
let student = PublishSubject<Student>()
student.asObservable()
.flatMapLatest {
$0.score.asObservable()
}
.subscribe(onNext: {
print($0)
})
.addDisposableTo(disposeBag)
student.onNext(ryan)
ryan.score.value = 85
// 此处转化成对charlotte的观察, 被观察的对象则会自动移动到charlotte, 而不再观察ryan
student.onNext(charlotte)
// 再次对ryan的值进行修改则不会观察到
ryan.score.value = 95
charlotte.score.value = 100
}
网友评论