두번째 글에서는 이해한 RxSwift의 기본 개념을 바탕으로 자주 사용하는 메서드를 알아본다. 무리하게 기억할 필요는 없고, 이렇게 사전 제작된 함수들이 많고, 잘 사용할 경우 유용하다는 사실까지만 이해해도 맛보기로는 충분할 듯 하다.
private func downloadJson(url: String) -> Observable<String?> {
Observable.create { emitter in
emitter.onNext("Hello")
emitter.onCompleted()
return Disposables.create()
}
}
private func downloadJson(url: String) -> Observable<String?> {
return Observable.just("hello")
}
private func downloadJson(url: String) -> Observable<String?> {
return Observable.just(["hello", "world"])
}
private func downloadJson(url: String) -> Observable<String?> {
return Observable.from(["hello", "world"])
}
_ = downloadJson(url: MEMBER_LIST_URL)
.subscribe { [weak self] event in
switch event {
case .next(let json):
DispatchQueue.main.async { [weak self] in
self?.editView.text = json
self?.setVisibleWithAnimation(self?.activityIndicator, false)
}
case .error(let error):
print(error)
case .completed:
break
}
}
_ = downloadJson(url: MEMBER_LIST_URL)
.subscribe(onNext: {
DispatchQueue.main.async { [weak self] in
self?.editView.text = json
self?.setVisibleWithAnimation(self?.activityIndicator, false)
}
})
onComplted
, onDisposed
등등이 있다.@IBAction func onLoad() {
self.editView.text = ""
self.setVisibleWithAnimation(self.activityIndicator, true)
_ = downloadJson(url: MEMBER_LIST_URL)
.subscribe(onNext: { json in
DispatchQueue.main.async { [weak self] in
self?.editView.text = json
self?.setVisibleWithAnimation(self?.activityIndicator, false)
}
})
}
@IBAction func onLoad() {
self.editView.text = ""
self.setVisibleWithAnimation(self.activityIndicator, true)
_ = downloadJson(url: MEMBER_LIST_URL)
.observeOn(MainScheduler.instance)
.subscribe(onNext: { [weak self] json in
self?.editView.text = json
self?.setVisibleWithAnimation(self?.activityIndicator, false)
})
}
var disposeBag = DisposeBag()
func temp() {
_ = downloadJson(url: MEMBER_LIST_URL)
.observeOn(MainScheduler.instance)
.subscribe(onNext: { [weak self] json in
self?.editView.text = json
self?.setVisibleWithAnimation(self?.activityIndicator, false)
})
self.disposeBag.insert(disp)
}
func temp() {
_ = downloadJson(url: MEMBER_LIST_URL)
.observeOn(MainScheduler.instance)
.subscribe(onNext: { [weak self] json in
self?.editView.text = json
self?.setVisibleWithAnimation(self?.activityIndicator, false)
})
.disposed(by: self.disposableBag)
}
{: .center-small}observeOn
SubscribOn
함수의 영향이다.SubscribOn
의 경우 어느 스레드에서 구독 작업을 시작할 것인지를 결정한다.