RxSwift 비동기 처리 중에 ProgressHUD를 발행

4408 단어 iOSSwiftRxSwift

import RxSwift
import SVProgressHUD

extension ObservableType {
  func withHUD(withStatus status: String? = nil) -> Observable<Self.E> {
    return self.do(onNext: nil, onError: { _ in
      SVProgressHUD.showError(withStatus: nil)
    }, onCompleted: {
      SVProgressHUD.showSuccess(withStatus: nil)
    }, onSubscribe: nil, onSubscribed: {
      SVProgressHUD.show(withStatus: status)
    }, onDispose: {
      SVProgressHUD.dismiss()
    })
  }
}

이런 식으로 하면
Auth().authorize().withHUD().subscribe(onNext: {
  //hoge
}).disposed(by: bag)

처리에 withHUD를 쓰는 것만으로 처리중에 자동으로 HUD를 내 준다고 생각한다

추가



츠코미 감사합니다.



MainScheduler로 동작시키는 것은 명시적으로 쓰는 편이 좋을까 생각합니다.

추가 2





Observable -> Observable로 구현 bind(to binder: (Self) -> T) -> T에 전달

과연! 이것이라면 Observable의 흐름을 바탕으로 부차적으로 동작하고 있는 것이 명시적으로 표현되고 있습니다… (공부가 되었습니다)

추가 3





bind한 수만큼 HUD가 발행된다/Driver라면 shared/Scheduler의 문제는 해결한다

SharedSequence/Driver로 한 시점에서 onError를 잡을 수 없게 되므로 이번 구현은 할 수 없는 생각이 들었습니다.
ObservableType에 대해서 extension해 SharedSequence를 돌려주는 구현으로 해 보는 것이 가까운 생각도 합니다만, 역시 scheduler와 shared의 필요성을 이용측의 책임으로 하는 것은 좋은 구현은 아니네요…

좋은 웹페이지 즐겨찾기