RxSwift基础学习

作者: CoderLWG | 来源:发表于2017-08-17 16:00 被阅读103次

    1.RxSwift常见操作

    never
    • never就是创建一个sequence,但是不发出任何事件信号。


    let bag : DisposeBag = DisposeBag()
    let neverObser = Observable<String>.never()
    neverObser.subscribe { (event : Event<String>) in
                print(event)
            }.addDisposableTo(bag)
    
    empty
    • empty就是创建一个空的sequence,只能发出一个completed事件


        let disposeBag = DisposeBag()
        Observable<Int>.empty()
            .subscribe { event in
                print(event)
            }
            .addDisposableTo(disposeBag)
    
    just
    • just是创建一个sequence只能发出一种特定的事件,能正常结束


            let bag : DisposeBag = DisposeBag()
            let justObser = Observable.just("swift")
            justObser.subscribe { (event : Event<String>) in
                print(event)
            }.addDisposableTo(bag)
            
            justObser.subscribe(onNext: { (str : String) in
                print(str)
            }).addDisposableTo(bag)
    
    of
    • of是创建一个sequence能发出很多种事件信号
     let bag : DisposeBag = DisposeBag()
      let ofObser = Observable.of("a", "b", "c")
      ofObser.subscribe { (event : Event<String>) in
             print(event)
        }.addDisposableTo(bag)
    
    from
    • from就是从数组中创建sequence
     let fromObser = Observable.from([1, 2, 3])
     fromObser.subscribe { (event : Event<Int>) in
              print(event)
        }.addDisposableTo(bag)
    
    create
    • 自定义可观察的sequence,那就是使用create


     let createObser = Observable.create { (observer : AnyObserver<Any>) -> Disposable in
                observer.onNext("lwg")
                observer.onNext(18)
                observer.onNext(1.88)
                observer.onCompleted()
                
                return Disposables.create()
            }
            
            createObser.subscribe { (event : Event<Any>) in
                print(event)
            }.addDisposableTo(bag)
    
    range
    • range就是创建一个sequence,他会发出这个范围中的从开始到结束的所有事件


     Observable.range(start: 1, count: 10)
               .subscribe { (event : Event<Int>) in
                    print(event)
            }.addDisposableTo(bag)
    
    repeatElement
    • 创建一个sequence,发出特定的事件n次


    Observable
              .repeatElement("hello world")
              .take(3)
              .subscribe { (event : Event<String>) in
                  print(event)
              }
              .addDisposableTo(bag)
    

    2.RxSwift中Subjects

    Subjects是什么?

    • Subjet是observable和Observer之间的桥梁,一个Subject既是一个Obserable也是一个Observer,它既可以发出事件,也可以监听事件。

    PublishSubject

    • 当你订阅PublishSubject的时候,你只能接收到订阅他之后发生的事件。subject.onNext()发出onNext事件,对应的还有onError()和onCompleted()事件


    let pubSub = PublishSubject<String>()
            pubSub.onNext("a")
            pubSub.onNext("b")
            
            pubSub.subscribe { (event : Event<String>) in
                print(event)
            }.addDisposableTo(bag)
            
            pubSub.onNext("c")
            pubSub.onNext("d")
            pubSub.onNext("e")
     只能接受到c、d、e,订阅之前的a、b不能接受到
    

    ReplaySubject

    • 当你订阅ReplaySubject的时候,你可以接收到订阅他之后的事件,也可以接受订阅他之前发出的事件,但是接受几个事件取决与bufferSize的大小,如下bufferSize = 2,只接受两个b、c和订阅之后的事
    //let replaySubs = ReplaySubject<String>.create(bufferSize: 2)
            // 订阅之前的无论多少都能接受
            let replaySubs = ReplaySubject<String>.createUnbounded()
            replaySubs.onNext("a")
            replaySubs.onNext("b")
            replaySubs.onNext("c")
            
            replaySubs.subscribe { (event) in
                print(event)
            }.addDisposableTo(bag)
            replaySubs.onNext("e")
            replaySubs.onNext("f")
    
    

    BehaviorSubject

    • 当你订阅了BehaviorSubject,你会接受到订阅之前的最后一个事件,和订阅之后的全部事件
            let beSubs = BehaviorSubject(value: "a") // 默认值a
            beSubs.onNext("b")
            beSubs.onNext("c")
            
            beSubs.subscribe { (event) in
                print(event)
            }.addDisposableTo(bag)
            
            beSubs.onNext("d")
            beSubs.onNext("e")
            beSubs.onNext("f")
    

    Variable

    • 对BehaviorSubject进行了封装
    • 如果要订阅Variable,必须先通过asObservable获取Observable
    • 如果要发出事件,不在使用onNext,直接修改value
    • 如果事件结束,会自动发出一个completed事件
    let variable = Variable("1")
            
     variable.asObservable().subscribe { (event) in
          print(event)
      }.addDisposableTo(bag)
            
     variable.value = "2"
     ariable.value = "3"
    

    相关文章

      网友评论

        本文标题:RxSwift基础学习

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