SWIFT/RxSwift

RxSwift 기본정리(Observable)

KataRN 2022. 12. 12. 00:15
반응형

안녕하세요. 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