美文网首页
RxSwift - 操作符二

RxSwift - 操作符二

作者: aven_kang | 来源:发表于2022-07-06 16:27 被阅读0次

from

将其他类型或者数据结构转换为 Observable


from

当你在使用 Observable 时,如果能够直接将其他类型转换 为 Observable ,这将是非常省事的。from 操作符就提供了 这种功能。

用例

将一个数组转换为 Observable :

let numbers = Observable.from([0,1,2,3])
        
        numbers.subscribe { index in
            print(index)
        }.disposed(by: bag)
// 等价于下面的代码
        let numbers1 = Observable<Int>.create { obser in
            obser.onNext(0)
            obser.onNext(1)
            obser.onNext(2)
            obser.onNext(3)
            return Disposables.create()
        }
        
        numbers1.subscribe { index in
            print(index)
        }.disposed(by: bag)

groupBy

将源 Observable 分解为多个子 Observable ,并且每个子Observable 将源 Observable 中“相似”的元素发送出来


groupBy

groupBy 操作符将源 Observable 分解为多个子Observable ,然后将这些子 Observable 发送出来。
它会将元素通过某个键进行分组,然后将分组后的元素序列 以 Observable 的形态发送出来。

用例

let numbers = Observable
            .from([0,1,2,3])
            .groupBy { element in
                element / 2 == 0 ? 1 : 0
            }
        
        numbers.subscribe { event in
            switch event {
            case .next(let group):
                group.asObservable().subscribe { event in
                    print("groupkey: \(group.key)  \(event)")
                }.disposed(by: self.bag)
            default:
                print("")
            }
        }.disposed(by: bag)

输出结果

groupkey: true  next(0)
groupkey: true  next(1)
groupkey: false  next(2)
groupkey: false  next(3)
groupkey: false  completed
groupkey: true  completed

从输出结果可以看出来,经过.groupBy 操作的Observable,在订阅的时候,经过筛选的observable其实是藏在.next事件里面的group里,通过group.key取出来

ignoreElements

忽略掉所有的元素,只发出 error 或 completed 事件

ignoreElements
ignoreElements操作符将阻止Observable发出next事件,但是允许他发出 error 或 completed 事件。 如果你并不关心 Observable 的任何元素,你只想知道Observable 在什么时候终止,那就可以使用ignoreElements操作符。

用例

        let numbers = Observable.from([1,2,3,4,5])
            .ignoreElements()

        numbers.subscribe { event in
            
            switch event {
            case .next(let number):
                print(number)
            case .error(let error):
                print("error")
            case .completed:
                print("comleted")
            default:
                print("")
            }
        }.disposed(by: bag)

加了.ignoreElements之后,将不再打印.next发出的事件,如果没有错误事件,那么就只会发出completed事件,如果注释了.ignoreElements,将是正常的打印.next发出的事件

interval

创建一个 Observable 每隔一段时间,发出一个索引数


interval

interval 操作符将创建一个 Observable ,它每隔一段设定的 时间,发出一个索引数的元素。它将发出无数个元素。

 let subject = PublishSubject<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
        subject.subscribe { index in
            print(index)
        }.disposed(by: bag)
/// 这两种写法都是可以的
        let timer = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
        timer.subscribe { index in
            print(index)
        }.disposed(by: bag)

相关文章

  • RxSwift - 操作符二

    from 将其他类型或者数据结构转换为 Observable 当你在使用 Observable 时,如果能够直接将...

  • RxSwift基础讲解

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

  • RxSwift文档六(单元测试)

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

  • RxSwift #04 | Operators

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

  • 理解 RxSwift:实现原理(二)

    理解 RxSwift:为什么要使用 RxSwift(一) 理解 RxSwift:实现原理(二) RxSwift 内...

  • 理解 RxSwift:为什么要使用 RxSwift(一)

    理解 RxSwift:为什么要使用 RxSwift(一) 理解 RxSwift:实现原理(二) RxSwift 是...

  • RxSwift 操作符

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

  • RxSwift 操作符

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

  • RxSwift 操作符

    1.Amb 在多个源 Observables 中, 取第一个发出元素或产生事件的Observable ,然后只发出...

  • RxSwift 操作符

    map 将源Observable的每个元素,通过提供的方法转换,然后返回含有转换后元素的Observable fl...

网友评论

      本文标题:RxSwift - 操作符二

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