[RxSwift]
비동기 이벤트 예시
- 버튼의 클릭을 나타내는 UIButton의 Tap 이벤트는 비동기 이벤트로, 데이터의 변화에 대해 관찰이 가능한 형태다.
- RxSwift에서 이를 Observable 형태로 만들 수 있다.
Observable
public class Observable<Element>: ObservableType {}
- 관찰이 가능한 흐름으로, 비동기 이벤트의 시퀀스를 생성할 수 있는 대상을 말한다.
- 비동기 이벤트를 어떤 관찰 가능한 타입으로 만든다 ==
비동기 이벤트를 제네릭 타입의 Observable이란 클래스의 인스턴스로 만든다는 것이다 이벤트가 발생시 이를 알리기 위해 그 이벤트에 대한 항목을 시퀀스로 방출한다이를 obser가 받는다
Observer
- Observer는 Observable을 구독한다
- Observer는 내가 원하는 비동기 이벤트를 방출하는
Observable을 구독할 경우
그 Observable이 비동기 이벤트가 실행되어항목(item)이 방출되면 그 항목을 받을 수 있다. - Observer가 Observable을 구독할 수 있게 해주는 것이
Subscrive라는 메서드다.
Subscribe
public func subscribe(
onNext: ((Element) -> Void)? = nil, // 구독하려는 Observable이 항목(item)을 방출 시 어떤 작업을 할 것인지
onError: ((Swift.Error) -> Void)? = nil, // 해당 Observable이 오류 발생 시 어떤 작업을 할 것인지
onCompleted: (() -> Void)? = nil, // 더 이상 이벤트 발생하지 않고 종료됐을 때 어떤 작업을 할 것인지
onDisposed: (() -> Void)? = nil
) -> Disposable
UIButton 클릭 이벤트 예시(Observable, Observer, Subscribe
sodeulButton
.rx
.tap
.subscribe(onNext: {
print("Observable이 항목을 방출 했다!")
},
onError: { error in
print("에러가 발생 했다!")
},
onCompleted: {
print("해당 이벤트가 끝났다!")
})
.disposed(by: disposedBag)
- tap 이벤트 발생 시 subscribe(onNext:…)를 통해 “구독”을 해서 해당 Observable이 방출하는 항목에 대해 받을 수 있다.
- 이 메서드의 파라미터로 아래 3가지를 각각 넘겨줄 수 있다.
- onNext(항목이 방출 됐을 때, 즉 버튼이 눌렸을 때 실행시킬 클로저)
- onError(에러가 발생 했을 때 실행시킬 클로저)
- onCompleted(이벤트가 종료됐을 때 실행시킬 클로저)
subscribe 메서드를 사용하면 메서드 내부에서 Observer를 자체적으로 생성한다.
// 자체적으로 AnnonymousObserver라는 것을 생성해서 해당 Observable에 subscribe를 해준다.
let observer = AnnonymousObserver<Element> { ... }
return Disposables.create(
self.asObservable().subscribe(observer),
disposable
)
- subscribe(onNext:…) 메서드를 사용할 경우, 메서드 내부에서 옵저버를 자체적으로 생성해서
우리가 직접 Observer를 생성하지 않고 파라미터로 클로저만 넘겨줘도 Observable을 구독하여 방출하는 항목을 받을 수 있게 된다.
Reference
- https://babbab2.tistory.com/182
- https://babbab2.tistory.com/185