美文网首页
RxSwift 转换操作符

RxSwift 转换操作符

作者: AKyS佐毅 | 来源:发表于2017-07-25 15:01 被阅读0次

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)

相关文章

  • RxSwift 转换操作符

    RxSwift中最重要的一类操作符,叫做Transform operators它们用来把一个Observable中...

  • RxSwift基础讲解

    RxSwift:RxSwift是一个使用可观察序列和函数式操作符编写异步和基于事件的代码的库。RxSwift常用的...

  • RxSwift文档六(单元测试)

    单元测试 测试自定义操作符 RxSwift用RxTest为所有操作符测试,位于Rx.xcworkspace项目内的...

  • js学习

    变量的声明 赋值 isNaN(n) 数值转换 parseInt 转换字符串 bool转换 比较操作符 三元操作符 ...

  • RxSwift #04 | Operators

    Overview RxSwift 提供了多种操作符(Operator),如果你了解 Swift 的高阶函数,比如 ...

  • Combine - Operator(操作符)(一)

    Debugger操作符 | 类型管理操作符 | 转换操作符 Debugger操作符 print - 打印所有消息,...

  • Rxjava2-二、操作符

    Rxjava记录总结操作符:创建操作符、转换操作符、合并操作符、过滤操作符、其他操作符、条件操作符. 创建操作符 ...

  • JNI基础 -- C++基础知识(类型转换/异常处理/IO )

    类型转换 C++的类型转换提供了4种类型转换操作符来应对不同场合的应用。 const_cast类型转换操作符类比J...

  • RxSwift 操作符

    just() 通过传入默认值初始化,Observable泛型,指定类型和不指定类型都无所谓,swift会自动...

  • RxSwift 操作符

    multicast let subject = PublishSubject ()let source = Pub...

网友评论

      本文标题:RxSwift 转换操作符

      本文链接:https://www.haomeiwen.com/subject/fwvwkxtx.html