값을 변경, 필터링, 합치는 operator를 사용해서 조금 더 편리하게 RxSwift를 사용할 수 있습니다.
Operator는 3가지 타입으로 나눌 수 있습니다.
1. Transformation Operator
2. Filtering Operator
3. Combining Operator
Transformation Operations
map
Observable의 값을 변환합니다.
flatMap
Observable을 받아서 새로운 Observable을 만듭니다.
-> map과 flatMap의 차이점
map: Observable 내부의 값을 바꿈 (클로저 내부의 return 값이 일반 값)
flatMap: Observable 내부의 값을 받아서 새로운 Observable을 만들어서 return함 (클로저 내부의 return값이 Observable )
Combining Operators
CombineLatest
인자로 받는 observable들의 이벤트가 하나만 발생하더라도 모든 값을 들고 옵니다.
(여러 개의 값이 전달됨)
Merge
인자로 받는 Observable들의 이벤트를 직렬로 보내줍니다.
(값이 하나씩 여러번 전달이 됩니다.)
Zip
모든 스트림의 값이 같은 횟수로 내려올 때 발생합니다.
만약 목표로 하는 개수와 맞지 않는 개수가 내려온다면 방출하지 않습니다.
withLatestFrom
combineLatest + 하나의 Observable이 trigging 됐을 때만 이벤트를 방출합니다.
A라는 observable이 trigging됐을 때 다른 값과 함께 전달해주고 싶을 때 사용합니다.
withUnretained
순환 참조를 막기 위해서 [weak self] 를 많이 사용하는데 withUnretained를 사용해서 self를 파라미터로 전달해줄 수 있습니다.
viewModel.info
.withUnretained(self) // (Object 객체, Element) 반환
.subscribe(onNext: { owner, info in // owner가 self와 동일
owner.doSomething(with: info)
})
.disposed(by: disposeBag)
Filtering Operations
filter
해당하는 조건을 충족하는 이벤트일 경우에만 내려줍니다.
skip
파라미터로 받는 개수만큼 건너뛰고 이벤트를 방출합니다.
distinctUntilChanged
같은 값이 들어오면 무시하고, 이전과 다른 값이 들어올 때만 이벤트를 방출합니다.
중복적으로 값을 방출하는 것을 방지할 때 많이 쓰입니다.
takeWhile
해당하는 조건을 만족할 때까지 이벤트를 방출해줍니다.
skipWhile
해당하는 조건을 만족할 때까지 이벤트를 방출하지 않습니다.
debounce
이벤트를 그룹화하여 특정 기간이 지난 후 하나의 이벤트만 발생하도록 합니다.
textfield같은 곳에서 많이 사용됩니다.
throttle
이벤트가 발생되고 난 후 설정한 기간동안 가장 최근의 이벤트를 방출합니다.
버튼을 여러번 클릭하는 것을 방지하는 경우에 많이 사용됩니다.
-> debounce와 throttle의 차이점
debounce: 트리거 여러번 들어오면 일정 시간동안 트리거가 안 들어올 때 방출
throttle: 이벤트 발생하고 쿨타임 있음
이외의 다양한 Operator는 RxMarble 사이트에서 마블을 움직여보면서 쉽게 이해할 수 있습니다.
'🍎 iOS > ⚡️ RxSwift' 카테고리의 다른 글
RxSwift 알아보기 (0) | 2022.12.03 |
---|