Observables and Observers # 2
Observer가 Observable을 구독하고 이벤트를 처리하는 방법에 대해서..
핵심:
- Observable -> Observer로 이벤트가 전달되는 시점은 Observer가 Observable을 구독하는 시점이다.
- Observer는 한번에 두개 이상의 이벤트를 동시에 처리하지 않는다. 따라서, Observable은 Observer가 하나의 이벤트를 처리한 후에 이어지는 이벤트를 전달한다.
Observables and Observers # 1
Observables and Observers # 1 게시물에서 Observable을 생성하는 방법에 대해 글을 작성했다.
하지만 아직 Observer가 Observable을 아래 코드와 같이 구독하지 않은 상태이기 떄문에 이벤트를 발생시킬 수 없었다.
// #1
Observable<Int>.create { (observer) -> Disposable in
observer.on(.next(0))
observer.onNext(1)
observer.onCompleted()
return Disposables.create()
}
// #2
Observable.from([0,1])
어떻게 해야 Observer가 Observable을 구독할 수 있을까?
어떻게 Observer가 Observable을 구독할까?
- subscribe 메소드를 이용해 구독
- subscribe 연산자라고도 부를 수 있다.
- subscribe 메서드가 Observer와 Observable을 연결시켜주는 역할을 한다.
예 :
let o1 = Observable<Int>.create { (observer) -> Disposable in
observer.on(.next(0))
observer.onNext(1)
observer.onCompleted()
return Disposables.create()
}
// #1
o1.subscribe {
print($0)
if let elem = $0.element{
print(elem)
}
}
// #2
o1.subscribe(onNext: ((Int) -> Void)?,
onError: ((Error) -> Void)?,
onCompleted:(() -> Void)?,
onDisposed: (() -> Void)?
)
// #2의 직접적인 사용 예
o1.subscribe(onNext: { elem in
print(elem)
} )
#1은 옵저버가 옵저버블로 부터 전달 받은 이벤트를 받는다.
이벤트 안에 저장된 값에 접근하기 위해서는 옵셔널 바인딩하여 접근한다.
(이벤트에 저장된 값이 없을수도 있기 때문에)
#2 는 인자로 개별 이벤트별로 클로저를 받는다.
개별 이벤트들을 별도의 클로저에서 처리하고 싶을때 주로 사용하게된다.
(파라미터별로 기본값들이 nil 로 선언되어 있어서 처리하지 않는 이벤트 파라미터는 아래와 같이 생략해서 사용 가능하다.)
예시:
o1.subscribe(onNext: { elem in
print(elem)
} )
#1 과 #2 의 차이점
- 클로저 파라미터로 next이벤트에 저장된 요소가 바로 전달된다. 그래서 element속성에 접근할 필요가 없다. 출력해보면 next이벤트로 전달된 요소들만 출력된다.
#1의 출력 결과
#2의 출력 결과
위의 결과에서 볼 수 있듯이,
-
#1에서는 next이벤트가 출력이 되고 그 이벤트에 접근해 안에 저장되어있는 값에 접근할 수 있다.
-
#2에서는 이벤트 next이벤트에서 자체적으로 처리하기 때문에 Next이벤트 안에 저장되어 있는 값에 직접적으로 접근이 가능했다.
Author And Source
이 문제에 관하여(Observables and Observers # 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tnddls2ek/Observables-and-Observers-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)