美文网首页
Rxswift入坑:被观察者 订阅者

Rxswift入坑:被观察者 订阅者

作者: 彡廿 | 来源:发表于2017-05-19 13:56 被阅读34次
 // 创建一个被观察者,和订阅者
    func create() {
       _ = Observable<String>.create { (observerOfString) -> Disposable in
            print("observer created")
            observerOfString.onNext("😷")
            observerOfString.onCompleted()
            return Disposables.create()
        }.subscribe({ (event) in
            print(event)
        })
    }
// 绑定一个按钮的点击事件
  func tap() {
      _ = btn.rx.tap.asObservable().subscribe({ (_) in
          print("点击了按钮")
      })
  }
  
  // never 创建一个序列不会终止也不会发出任何事件
  func never() {
      let neverObserver = Observable<String>.never()
      neverObserver.subscribe { (_) in
          print("never")
      }.disposed(by: disposeBag)
  }
    // empyt 空序列,只会发出一个完成事件
    func empty() {
        let emptyObserver = Observable<Int>.empty()
        emptyObserver.subscribe { (_) in
            print("empty")
        }.disposed(by: disposeBag)
    }
    // just 创建一个单个元素的序列
    func just()  {
        let justObserver = Observable.just(10)
        justObserver.subscribe { (event) in
            print(event)
        }.disposed(by: disposeBag)
    }
    // of 使用固定数量的元素创建一个序列
    func of() {
        let ofObserver = Observable.of(10,12,14,16)
        ofObserver.subscribe(onNext: { (element) in
            print(element)
        }, onError: { (error) in
            print(error)
        }, onCompleted: { 
            print("complete")
        }) { 
            print("disposeBag")
        }.disposed(by: disposeBag)
        
        ofObserver.subscribe(onNext: { (element) in
            print(element)
        }).disposed(by: disposeBag)
    }
    ```
// from 从一个序列创建一个可被观察的序列
func from () {
    let fromObserver = Observable.from(["😀","😉","😗","🤗"])
    fromObserver.subscribe { (event) in
        print(event)
    }.disposed(by: disposeBag)
    
}
// range 创建一个发出一系列顺序`整数`然后终止的序列
func range () {
    let rangeObserver = Observable<Int>.range(start: 1, count: 10)
    rangeObserver.subscribe { (event) in
        print(event)
    }.disposed(by: disposeBag)
}
```
    // repeatElement 创建一个给予元素的无限序列
    func repeatElement() {
        Observable.repeatElement("🌘").takeLast(4).subscribe { (event) in
            print(event)
        }.disposed(by: disposeBag)
    }
    ```
// generate 创建一个满足指定条件的序列
func generate() {
    Observable.generate(initialState: 10, condition: { (element) -> Bool in
        return element < 14
    }) { (element) -> Int in
        return element + 1
    }.subscribe { (event) in
        print(event)
    }.disposed(by: disposeBag)
}
```
    // deferred 只有当订阅者订阅的时候才会去创建序列
    func deferred() {
        var count = 1
        let deferredSequence = Observable<String>.deferred { () -> Observable<String> in
            print("create \(count)")
            count += 1
            return Observable.create({ (observer) -> Disposable in
                print("emitting...")
                observer.onNext("1")
                observer.onNext("2")
                observer.onNext("3")
                return Disposables.create()
            })
        }
        
        deferredSequence.subscribe { (event) in
            print(event)
        }.disposed(by: disposeBag)
        
        deferredSequence.subscribe { (event) in
            print(event)
        }.disposed(by: disposeBag)
    }
    
    enum TestError: Error {
        case test
    }
    ```
// 创建一个没有元素但是以错误终止的序列
func error() {
    Observable<Int>.error(TestError.test)
    .subscribe { (error) in
        print(error)
    }
    .disposed(by: disposeBag)
}
// 拦截器,只能拦截不能修改
func doOn() {
    Observable.of("1","4","9")
    .do(onNext: { (element) in
        print("拦截到的值" + element)
    })
    .subscribe { (event) in
        print(event)
    }
    .disposed(by: disposeBag)
}
// Subject: 是一个桥梁,即是被观察者又是订阅者

func subject() {
    let subject = PublishSubject<String>()
    subject.subscribe().disposed(by: disposeBag)
    subject.onNext("1")
    subject.onNext("2")
    
    subject.subscribe().disposed(by: disposeBag)
    subject.onNext("10")
    subject.onNext("12")
    
}

相关文章

  • Rxswift入坑:被观察者 订阅者

  • RxSwift(V) - 源码解析

    RxSwift 角色定位 观察者(Observer) 被观察者(可观察的)(Observable) 订阅者(Sub...

  • RxSwift 核心原理解析

    RxSwift 核心原理解析 角色定位 观察者(Observer) 被观察者(Observable) 订阅者(Su...

  • RXSwift笔记

    观察者模式:KVO、通知 被观察者:发出一个事件 观察者/订阅者:对被观察者对象进行响应 RXSwift:把程序中...

  • RxSwift源码分析(一)序列核心逻辑

    RxSwift核心概念就是观察者(observer)订阅一个可观察者序列(Observable),观察者对数据序列...

  • RxSwift - 学习笔记一

    一、创建可观察者 二、订阅观察者 RxSwift 还提供了另一个 subscribe 方法,它可以把 event ...

  • RxJava执行流程和线程切换原理

    核心问题:为甚是被观察者订阅观察者RxJava执行的流程线程切换的原理 为甚是被观察者订阅观察者 Observab...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • JS设计模式-观察者模式

    观察者模式 包含发布订阅 与发布订阅的区别 : 发布和订阅是没有关系的,观察者模式观察者和被观察者是有关系的,观察...

  • RXJava

    传统的观察者模式 RxJava 四个要素 被观察者 观察者 订阅 事件 创建被观察者subscriber就是观察者...

网友评论

      本文标题:Rxswift入坑:被观察者 订阅者

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