Subject

作者: 桔子听 | 来源:发表于2018-03-14 16:28 被阅读10次

subject即是被观察者也是观察者。

Subject类型

  • PublishSubject

没有初始值,要先订阅,才会发送事件。

  • BehaviorSubject

有一个初始值,对于新的订阅,会重发最近的一次事件,如果没有其他事件,会重发初始值的事件。

let subject = BehaviorSubject(value: "Initial value")
  • ReplaySubject

有一个初始的缓冲大小,有新的订阅,会重发缓冲起来的所有事件。

let subject = ReplaySubject<String>.create(bufferSize: 2)
  • Variable

BehaviorSubject的包装,保存当前的值作为state,有新的订阅,重发最近的一次事件,如果没有其他事件,会重发初始值的事件。

let variable = Variable("Initial value")
let disposeBag = DisposeBag()
variable.value = "New initial value"
variable.asObservable()
    .subscribe {
      print(label: "1)", event: $0)
    }
    .disposed(by: disposeBag)

Variable需要初始值,用asObservable转为Observable,用value直接取得当前值。

如果这里的value是数组,改变数组也会触发事件。和KVO监听属性不一样。

PublishSubject代替delegate回调

在需要回调的页面里定义PublishSubject,但不要直接暴露PublishSubject,提供一个获取PublishSubject的方法:

private let selectedPhotosSubject = PublishSubject<UIImage>()
var selectedPhotos: Observable<UIImage> {
  return selectedPhotosSubject.asObservable()
}

// 发事件
selectedPhotosSubject.onNext(image)

viewWillDisappear中发送onComplete(),避免内存泄漏。

在其他页面获取到selectedPhotosSubject,进行监听,获取回调值。

photosViewController.selectedPhotos
  .subscribe(onNext: { [weak self] newImage in
  }, onDisposed: {
    print("completed photo selection")
  })
  .disposed(by: bag)

相关文章

  • RxJava2.0----Subject&Observe

    Subject/Observer Subject/Observer模式,Subject翻译为主题 , Subjec...

  • RAC flattenMap

    flattenMap: RACSubject * subject = [RACSubject subject]; ...

  • shiro介绍

    Subject主体,代表了当前“用户,所有Subject都绑定到SecurityManager,与Subject的...

  • Subject

    subject即是被观察者也是观察者。 Subject类型 PublishSubject 没有初始值,要先订阅,才...

  • Subject

    PublishSubject 是Observable的子类 var publishSubject = Publis...

  • Subject

    1.Subject可以看成是一个桥梁或者代理,在RxJava中,它同时充当了Observer和Observable...

  • No subject

    They say that goods things happens to good people, today ...

  • 《subject》

    我要尝试再多一些的办法 变聪明 变迟钝 变近 变远 变得看得见 变得摸不着 把夏宇变成我 把我变成卞之琳 我要尝试...

  • Subject

    普通的 Observable 订阅时就会发射。 而 Subject 不同,看看订阅时它干了什么,以 Publish...

  • subject

    subject 不会输出 subcribe 前面的数据;behaviorSubject 会 输出 subcrib...

网友评论

      本文标题:Subject

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