RxSwift<7> – 장면 시퀀스 요약

2650 단어
ControlEvent ControlEvent: UI 컨트롤에서 발생하는 이벤트에 대해 설명합니다.
  • 오류가 발생하지 않습니다
  • 반드시 Main Scheduler에서 구독하세요
  • 반드시 Main Scheduler에서 감청해야 한다
  • 부가작용을 공유합니다
  • let controlEventOB = self.btn.rx.controlEvent(.touchUpInside)
    
    controlEventOB.subscribe { (reslut) in
            print(" :\(reslut) 
    \(Thread.current)") }.disposed(by: disposeBag) controlEventOB.subscribe { (reslut) in print(" :\(reslut)
    \(Thread.current)") }.disposed(by: self.disposeBag)
  • events.subscribeOn(ConcurrentMainScheduler.instance)은 홈팀 열 스케줄링을 보장합니다
  • UI 응답 이벤트, 실패 응답은 없습니다

  • binder
  • 오류 이벤트를 처리하지 않습니다
  • 길드가 지정된 Scheduler에서 실행되는지 확인합니다(기본 MainSchedluer)
  • 오류 이벤트가 발생하면 디버그 환경에서fatalError를 실행하고 발표 환경에서 오류 정보를 출력합니다
  • let observer : AnyObserver = 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(self.label) { (lab, isHidden) in
        print("Binder :\(Thread.current)")
        lab.isHidden = isHidden
    }
    
    let observable = Observable.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 레이어를 단순화하기 위한 코드입니다.그러나 만약 당신이 만나는 서열에 다음과 같은 특징이 있다면:
  • 오류 이벤트가 발생하지 않습니다
  • 반드시 Main Schedluer에서 감청해야 한다
  • 부가작용을 공유합니다
  • 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)
    
  • 베이스 원본 봉인 소스.share (replay:1,scope:.whileconnected) 시퀀스 상태 공유
  • catchErrorJustReturn(onErrorJustReturn)은 오류 없는 신호를 보장합니다
  • ObserveOn(DriverSharing Strategy.scheduler)은 스케줄링 환경이 주 라인에 있음을 보장한다
  • 좋은 웹페이지 즐겨찾기