Operator - 操作符

4.4 Operator - 操作符 - 图1

操作符可以帮助大家创建新的序列,或者变化组合原有的序列,从而生成一个新的序列。

我们之前在输入验证例子中就多次运用到操作符。例如,通过 map 方法将输入的用户名,转换为用户名是否有效。然后用这个转化后来的序列来控制红色提示语是否隐藏。我们还通过 combineLatest 方法,将用户名是否有效密码是否有效合并成两者是否同时有效。然后用这个合成后来的序列来控制按钮是否可点击。

这里 mapcombineLatest 都是操作符,它们可以帮助我们构建所需要的序列。现在,我们再来看几个例子:

filter - 过滤

4.4 Operator - 操作符 - 图2

你可以用 filter 创建一个新的序列。这个序列只发出温度大于 33 度的元素。

map - 转换

4.4 Operator - 操作符 - 图3

你可以用 map 创建一个新的序列。这个序列将原有的 JSON 转换成 Model 。这种转换实际上就是解析 JSON

zip - 配对

4.4 Operator - 操作符 - 图4

你可以用 zip 来合成一个新的序列。这个序列将汉堡序列的元素和薯条序列的元素配对后,生成一个新的套餐序列。

如何使用操作符

使用操作符是非常容易的。你可以直接调用实例方法,或者静态方法:

  • 温度过滤

    1. // 温度
    2. let rxTemperature: Observable<Double> = ...
    3. // filter 操作符
    4. rxTemperature.filter { temperature in temperature > 33 }
    5. .subscribe(onNext: { temperature in
    6. print("高温:\(temperature)度")
    7. })
    8. .disposed(by: disposeBag)
  • 解析 JSON

    1. // JSON
    2. let json: Observable<JSON> = ...
    3. // map 操作符
    4. json.map(Model.init)
    5. .subscribe(onNext: { model in
    6. print("取得 Model: \(model)")
    7. })
    8. .disposed(by: disposeBag)
  • 合成套餐

    1. // 汉堡
    2. let rxHamburg: Observable<Hamburg> = ...
    3. // 薯条
    4. let rxFrenchFries: Observable<FrenchFries> = ...
    5. // zip 操作符
    6. Observable.zip(rxHamburg, rxFrenchFries)
    7. .subscribe(onNext: { (hamburg, frenchFries) in
    8. print("取得汉堡: \(hamburg) 和薯条:\(frenchFries)")
    9. })
    10. .disposed(by: disposeBag)

决策树

Rx 提供了充分的操作符来帮我们创建序列。当然如果内置操作符无法满足你的需求时,你还可以创建自定义的操作符。

如果你不确定该如何选择操作符,可以参考 决策树。它会引导你找出合适的操作符。

操作符列表

26个英文字母我都认识,可是连成一个句子我就不怎么认得了…

这里提供一个操作符列表,它们就好比是26个英文字母。你如果要将它们的作用全部都发挥出来,是需要学习如何将它们连成一个句子的: