美文网首页
RXSwift - 忽略 、 获取事件操作符

RXSwift - 忽略 、 获取事件操作符

作者: 内蒙小猿 | 来源:发表于2020-08-23 06:11 被阅读0次

    enum E : Error {
        case demoAError
        case demoBError
    }
    
    

    \color{#008080}{\Large{忽略事件操作符 }}

    ignoreElements :忽略序列中所有的 .next事件。

            let tasks = PublishSubject<String>()
            
            _ = tasks.ignoreElements().subscribe(onCompleted: {
                print("onCompleted")
            }) { (_) in
                print("onError")
            }
            
            tasks.onNext("1")
            tasks.onNext("2")
            tasks.onNext("3")
            tasks.onNext("4")
            tasks.onCompleted()
    
    

    \color{#DEB887}{执行结果:onCompleted}

    skip :忽略特定个数的 .next 事件。

            let tasks = PublishSubject<String>()
            
            _ = tasks.skip(2).subscribe(onNext: { (str) in
                print(str)
            }, onError: { (_) in
                print("onError")
            }, onCompleted: {
                print("onCompleted")
            }, onDisposed: {
                print("onDisposed")
            })
            
            tasks.onNext("1")
            tasks.onNext("2")
            tasks.onNext("3")
            tasks.onNext("4")
            tasks.onCompleted()
    
    

    \color{#DEB887}{执行结果:3 -> 4 -> onCompleted -> onDisposed}

    skipWhile :当遇到第一个不满足条件的事件,就开始监听 , 第一个不满足条件的事件也会打印。

            let tasks = PublishSubject<String>()
    
            _ = tasks.skipWhile({ (str) -> Bool in
                return str != "2"
            }).subscribe(onNext: { (str) in
                print(str)
            }, onError: { (_) in
                print("onError")
            }, onCompleted: {
                print("onCompleted")
            }, onDisposed: {
                print("onDisposed")
            })
            
            tasks.onNext("1")
            tasks.onNext("2")
            tasks.onNext("3")
            tasks.onNext("4")
            tasks.onCompleted()
    
    

    \color{#DEB887}{执行结果:2 -> 3 -> 4 -> onCompleted -> onDisposed}

    skipUntil :当遇见 另一个observable序列中的事件, 就开始监听自身的事件,只打印自身的事件。

            let tasksTwo = PublishSubject<String>()
            let tasks = PublishSubject<String>()
    
            _ = tasks.skipUntil(tasksTwo).subscribe(onNext: { (str) in
                print(str)
            }, onError: { (_) in
                print("onError")
            }, onCompleted: {
                print("onCompleted")
            }, onDisposed: {
                print("onDisposed")
            })
            
            tasks.onNext("1")
            tasks.onNext("2")
            tasksTwo.onNext("one")
            tasks.onNext("3")
            tasks.onNext("4")
            tasks.onCompleted()
            tasksTwo.onCompleted()
    
    

    \color{#DEB887}{执行结果:3 -> 4 -> onCompleted -> onDisposed }

    distinctUntilChange: 忽略序列中连续重复的事件。

            let tasks = PublishSubject<String>()
    
            _ = tasks.distinctUntilChanged().subscribe(onNext: { (str) in
                print(str)
            }, onError: { (_) in
                print("onError")
            }, onCompleted: {
                print("onCompleted")
            }, onDisposed: {
                print("onDisposed")
            })
            
            tasks.onNext("1")
            tasks.onNext("1")
            tasks.onNext("3")
            tasks.onNext("4")
            tasks.onCompleted()
    

    \color{#DEB887}{执行结果:1 -> 3 -> 4 -> onCompleted -> onDisposed }

    \color{#008080}{\Large{ 获取事件操作符 }}

    elementAt :选择序列中的第n个事件。

    let tasks = PublishSubject<String>()
            
            _ = tasks.elementAt(2).subscribe(onNext: { (Str) in
                print(Str)
            }, onError: { (_) in
                print("onError")
            }, onCompleted: {
                print("onCompleted")
            }, onDisposed: {
                print("onDisposed")
            })
            
            tasks.onNext("1")
            tasks.onNext("1")
            tasks.onNext("3")
            tasks.onNext("4")
            tasks.onCompleted()
    
    

    \color{#DEB887}{执行结果:3 -> onCompleted ->onDisposed }

    filter :通过closure自定义过滤条件。

            let tasks = PublishSubject<String>()
            
           _ = tasks.filter { (str) -> Bool in
                return str == "1"
            }.subscribe(onNext: { (str) in
                print(str)
            }, onError: { (_) in
                print("onError")
            }, onCompleted: {
                print("onCompleted")
            }) {
                print("onDisposed")
            }
            
            
            tasks.onNext("1")
            tasks.onNext("1")
            tasks.onNext("3")
            tasks.onNext("4")
            tasks.onCompleted()
    
    

    \color{#DEB887}{执行结果: 1 -> 1 -> onCompleted -> onDisposed}

    take :订阅指定位置的事件外,我们还能一次性订阅多个事件。take (2) 表示订阅序列中 的前两个字段。

            let tasks = PublishSubject<String>()
            
            _ = tasks.take(2).subscribe(onNext: { (str) in
                print(str)
            }, onError: { (_) in
                print("onError")
            }, onCompleted: {
                print("onCompleted")
            }) {
                print("onDisposed")
            }
            
            tasks.onNext("1")
            tasks.onNext("2")
            tasks.onNext("3")
            tasks.onNext("4")
            tasks.onCompleted()
    
    

    \color{#DEB887}{执行结果:1 -> 2 -> onCompleted -> onDisposed}

    takeWhile :用一个 closure 指定 “只要条件为true”就一直订阅下去。

            let tasks = PublishSubject<String>()
    
            _ = tasks.takeWhile({ (str) -> Bool in
                return str != "3"
            }).subscribe(onNext: { (str) in
                print(str)
            }, onError: { (_) in
                print("onError")
            }, onCompleted: {
                print("onCompleted")
            }) {
                print("onDisposed")
            }
            
            
            tasks.onNext("1")
            tasks.onNext("2")
            tasks.onNext("3")
            tasks.onNext("4")
            tasks.onCompleted()
    
    

    \color{#DEB887}{执行结果:1 -> 2 -> onCompleted -> onDisposed }

    takeUntil : 表示知道里一个序列发生之前,一直订阅着当前序列。如果另一个序列发生事件,订阅结束。

            let tasks = PublishSubject<String>()
            let tasksTwo = PublishSubject<String>()
            
            _ = tasks.takeUntil(tasksTwo).subscribe(onNext: { (str) in
                print(str)
            }, onError: { (_) in
                print("onError")
            }, onCompleted: {
                print("onCompleted")
            }) {
                print("onDisposed")
            }
            
            tasks.onNext("1")
            tasks.onNext("2")
            tasksTwo.onNext("one")
            tasks.onNext("3")
            tasks.onNext("4")
            tasks.onCompleted()
            tasksTwo.onCompleted()
    
    

    \color{#DEB887}{执行结果:1 -> 2 -> onCompleted -> onDisposed }

    相关文章

      网友评论

          本文标题:RXSwift - 忽略 、 获取事件操作符

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