美文网首页
RxSwift<7> —— 场景序列总结

RxSwift<7> —— 场景序列总结

作者: Gollum_ | 来源:发表于2019-10-16 09:42 被阅读0次

ControlEvent
ControlEvent:专门描述UI控件所产生的事件:

  • 不会产生error
  • 一定在MainScheduler订阅
  • 一定在MainScheduler监听
  • 会共享附加作用
let controlEventOB = self.btn.rx.controlEvent(.touchUpInside)

controlEventOB.subscribe { (reslut) in
        print("订阅:\(reslut) \n \(Thread.current)")
    }.disposed(by: disposeBag)

controlEventOB.subscribe { (reslut) in
        print("订阅:\(reslut) \n \(Thread.current)")
    }.disposed(by: self.disposeBag)
  • events.subscribeOn(ConcurrentMainScheduler.instance)保证主队列调度
  • UI响应事件,不会存在失败响应

binder

  • 不会处理错误事件
  • 确保帮顶给定Scheduler上执行(默认MainSchedluer)
  • 一旦产生错误事件,在调试环境下将执行fatalError,发布环境下打印错误信息
let observer : AnyObserver<Bool> = AnyObserver { (event) in
    print("observer当前线程:\(Thread.current)")
    switch event{
    case .next(let isHidden) :
        print("来了,请看label的状态")
        self.label.isHidden = isHidden
    case .error(let error) :
        print("\(error)")
    case .completed :
        print("完成了")
    }
}

let binder = Binder<Bool>(self.label) { (lab, isHidden) in
    print("Binder当前线程:\(Thread.current)")
    lab.isHidden = isHidden
}

let observable = Observable<Bool>.create { (ob) -> Disposable in
    ob.onNext(true)
    ob.onError(NSError.init(domain: "com.lgcoooci.cn", code: 10086, userInfo: nil))
    ob.onCompleted()
    return Disposables.create()
    }.observeOn(ConcurrentDispatchQueueScheduler(queue: DispatchQueue.global()))

// observable.bind(to: observer).disposed(by: self.disposeBag)
observable.bind(to: binder).disposed(by: self.disposeBag)

Driver
主要是为了简化 UI 层的代码。不过如果你遇到的序列具有以下特征:

  • 不会产生error事件
  • 一定在MainSchedluer监听
  • 会共享附加作用
let result = self.textFiled.rx.text.orEmpty
    .asDriver() // 普通序列转化为
    .throttle(.milliseconds(500))
    .flatMap {
        self.dealwithData(inputText: $0)
            .asDriver(onErrorJustReturn: "检测到了错误")
}

// 绑定到label上面
result.map { "长度:\(($0 as! String).count)" }
    .drive(self.label.rx.text)
    .disposed(by: disposeBag)
// 绑定到button上面
result.map { ($0 as! String) }
    .drive(self.btn.rx.title())
    .disposed(by: disposeBag)
  • 底层源码封装source.share(replay:1,scope:.whileconnected)序列状态共享
  • catchErrorJustReturn(onErrorJustReturn) 保证了无错误信号
  • observeOn(DriverSharingStrategy.scheduler)保证了调度环境在主线程

相关文章

网友评论

      本文标题:RxSwift<7> —— 场景序列总结

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