RxSwift 转换操作符

RxSwift中最重要的一类操作符,叫做Transform operators它们用来把一个Observable中的事件,变成另外一种形式。可以说,任何一个基于RxSwift开发的项目,都会使用这一类操作符。作为这个话题的第一部分,我们来看一些直观易懂的Transform operators。
七种转换操作符

delay

delayWithSelector

delayWithSelector.png

map

通过使用一个闭包函数将原来的Observable序列转换为一个新的Observable序列

let disposeBag = DisposeBag()
Observable.of(1,2,3)
    .map({
    return $0 * $0
}).subscribe({print($0)})
  .disposed(by: disposeBag)

执行结果

next(1)
next(4)
next(9)
completed

flatmap

现实中很多事件都是异步发生的,而并不是像Observable.of创建的看起来像集合这样的。因此,当我们需要对异步发生的事件序列进行变换的时候,就需要订阅原来的事件序列,对异步发生的事件有所察觉。其中,网络编程就是一个最典型的例子。为了在请求一个网络资源后,根据服务器返回的结果对原事件序列进行变换,flatMap就是最好的选择


let disposeBag = DisposeBag()

struct Student {
var score:Variable<Int>
}

let student1 = Student(score: Variable(60))
let student2 = Student(score: Variable(70))

let observables = Variable(student1)
observables.asObservable()
.flatMap({
    $0.score.asObservable()
})
.subscribe(onNext: {
    print($0)
})
.disposed(by: disposeBag)

student1.score.value = 75
observables.value = student2
student1.score.value = 85
student2.score.value = 20

执行结果

60
75
70
85
20

scan

scan就是提供一个初始化值,然后使用计算闭包不断将前一个元素和后一个元素进行处理,并将处理结果作为单个元素的Observable序列返回


let disposeBag = DisposeBag()
    
Observable.of(10, 100, 1000)
    .scan(2) { aggregateValue, newValue in
        aggregateValue + newValue
    }
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

执行结果:

12
112
1112

toArray

let bag = DisposeBag()

Observable.of(1, 2, 3)
    .toArray()
    .subscribe(onNext: {
        // Array<Int>
        print(type(of: $0))
        // [1, 2, 3]
        print($0)
    }).addDisposableTo(bag)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容