안녕하세요. KataRN입니다.
오늘은 RxSwift의 기본에 대해 정리해보려고 합니다.
1. Observable
- T형태의 데이터를 전달할 수 있는 일련의 이벤트를 생성하는 기능
- Observable는 subscribe를 이용해서 구독을 해야 Observable의 데이터가 방출된다.
- 3가지 유형의 이벤트만 방출
enum Event<Element> {
case next(Element) //다음 Element를 전달
case error(Swift.Error) //에러를 전달 실패로 종료
case completed //성공적으로 종료
}
- next를 제외하고는 방출후에 종료된다.
- 생성하는 방법은 just, of, from, create, empty, never, range(start:, count: )이 있다.
- deffer: Observable를 조건부로 Observable를 만든다?
- empty: subscribe()시, completed 방출(자세한 설명은 바로 아래있음.)
1-1 Observable.create
Observable.create { observer -> Disposable in
observer.onNext(1) //observer.on(.next(1))과 같다.
observer.onCompleted() //observer.on(.completed)와 같다.
observer.onNext(2)
return Disposables.create()
}
.subscribe {
print($0)
}
.disposed(by: disposeBag)
//next(1)
//completed
//종료되어 2는 안나옴
//observer.onError(MyError.anError)을 넣었으면 에러 방출 후 종료됨.
2. Subscribe
- Subscribe는 Observable의 데이터를 방출하는것이다.
- next: next는 다음 데이터를 방출한다. 가져온 데이터를 옵저버가 받는다.
- completed: completed는 시퀸스를 끝낸다. 더이상 이벤트를 방출하지 않는다.
- error : error은 오류로 시퀸스를 끝낸다. 더이상 이벤트를 방출하지 않는다.
//1번 예시 - Observable을 생성(1을 생성한것)
Observable.just(1)
//결과 -> 아무일도 일어나지 않는다.
//2번 예시 - Observable을 생성(2를 생성한것) + 데이터를 방출한것.
Observable.just(1)
.subscribe(onNext: {
print($0)
})
//결과 -> 1이 콘솔에 찍힌다.
Observable.just(1)
.subscribe {
print($0)
}
//결과 -> next(1)
// -> completed
//2개가 찍힌다.
3. DisposeBag()
- Rx의 메모리 관리를 위한 방법(모든 옵저버들과 방출된 리소스들에 대해서 구독을 해제하는것)
- error나 completed 등으로 더이상 구독하지 않는 상태가 되었을때 정리하도록 dispose()함수를 사용한다.
- dispose()를 모든곳에 쓰는것보다 변수로 disposeBag을 선언한 후에 마지막에 .disposed 해주면 된다.
//사용법
let disposeBag = DisposeBag()
Observable.of(1, 2, 3)
.subscribe({
print($0)
})
.disposed(by: disposeBag)
저는 헷갈려서 짧게 짧게 정리하려고합니다.
오늘도 읽어주셔서 감사합니다.
'SWIFT > RxSwift' 카테고리의 다른 글
Operators 정리 (0) | 2022.12.20 |
---|---|
RxSwift 기본정리3(Subjects) (0) | 2022.12.12 |
RxSwift 기본정리2(Traits) (0) | 2022.12.12 |