반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- RFC1738/1808
- dismiss
- Operators
- nonisolated
- IOS
- NullObject
- init
- SwiftUI
- NavigationLink
- nestjs
- RxCocoa
- subject
- @EnvironmentObject
- ios14
- Bug
- Operater
- vim
- Creating Operators
- init?
- URL(string:)
- RxSwift
- operator
- @Environment
- @State
- Xcode
- swift6
- SWIFT
- typeorm
- graphql
- @Binding
Archives
- Today
- Total
Tunko Development Diary
RxSwift) Observables 과 Observers 본문
Observable 은 Observale Sequence 또는 Sequence 라고 불리기도 한다.
Observable → Event → Observar
옵저버블은 옵저버에게 이벤트를 전달합니다.
Observable ← Subscribe ← Observar(subscriber)
옵저버는 옵저버블을 구독합니다.
Observable을 Observer가 감시하는걸 구독한다고 합니다. 따라서 subscriber(구독자) 라고 불리기도 합니다.
옵저버블이 보내는 이벤트는 3가지 입니다.
- Next (Emission : 방출, 배출)
- Error
- Completed
Error, Completed는 마지막에 전달됩니다.
Error, Completed는 Emission이 아닌 Notification이라고 부릅니다.
RxMables 를 통해 동작을 확인할 수 있습니다.
RxMarbles: Interactive diagrams of Rx Observables
예시 코드)
// 여기서 create는 연산자라고 불립니다.
// create 연산자는 클로저를 받고 Disposable을 리턴합니다.
// (observer) -> Disposable
Observable<Int>.create { (observer) -> Disposable in
observer.on(.next(0)) // 0 이벤트 호출
observer.onNext(1) // 1 이벤트 호출
observer.onCompleted()
return Disposables.create()
}
// from은 연산자입니다.
// from은 배열안에 데이터를 순서대로 이벤트호출하고 Disposable까지 반환합니다.
Observable.from([0, 1])
// 위 코드는 선언부입니다. 해당 옵저버블이 실행되진 않습니다.
// 선언된 옵저버블이 실행될 때는 구독하는 시점에 실행됩니다.
옵저버가 구독을 시작하는 방법은 선언된 Observable에서 subcribe 메소드를 호출하는 것입니다.
subscribe 는 연산자라고 불리기도합니다..
subscribe 메소드는 Observable과 Observer 을 연결합니다.
Observable과 Observer 연결해야만 이벤트가 전달 됩니다.
subscribe 메소드는 클로저를 반환합니다.
let o1 = Observable<Int>.create { (observer) -> Disposable in
observer.on(.next(0)) // 0 이벤트 호출
observer.onNext(1) // 1 이벤트 호출
observer.onCompleted()
return Disposables.create()
}
// 모든 이벤트를 받음 next, error, completed
o1.subscribe {
print("=== start ===")
print($0)
if let elem = $0.element {
print(elem)
}
print("=== end ===")
}
print("-------------------")
// Next 이벤트를 통해 전달 된 값만 호출
o1.subscribe(onNext: { elem in print(elem) })
옵저버는 두개의 이벤트를 동시에 호출 하지 않습니다.
하나씩 이벤트를 호출합니다.
아래는 호출 결과 입니다.
=== start === // 1
next(0)
0
=== end ===
=== start === // 2
next(1)
1
=== end ===
=== start === // 3
completed
=== end ===
------------------------
0
1
//1 : 0 이벤트 호출부분
//2 : 1 이벤트 호출부분
//3 : observer.onCompleted() 이벤트 호출부분
반응형
'Development > RxSwift' 카테고리의 다른 글
RxSwift) PublishSubject 란? (0) | 2022.05.30 |
---|---|
Subject 란? (0) | 2022.05.30 |
RxSwift) Operators 란? (0) | 2022.05.30 |
RxSwift) Disposables 란? (0) | 2022.05.30 |
Reactive Programming 란? (0) | 2022.05.30 |
Comments