ignoreElements
onNext 이벤트를 무시한다. onComplete 나 onError 와 같은 정지 이벤트만 허용한다.
print("-----ignoreElements-----")
let sleepMode = PublishSubject<String>()
sleepMode
.ignoreElements()
.subscribe { _ in
print("🔥")
}
.disposed(by: disposeBag)
sleepMode.onNext("😂")
sleepMode.onNext("😂")
sleepMode.onNext("😂")
-----ignoreElements-----
print("-----ignoreElements-----")
let sleepMode = PublishSubject<String>()
sleepMode
.ignoreElements()
.subscribe {
print($0)
}
.disposed(by: disposeBag)
sleepMode.onNext("😂")
sleepMode.onNext("😂")
sleepMode.onNext("😂")
sleepMode.onCompleted()
-----ignoreElements-----
completed
element(at: )
n 번째 인덱스의 onNext 이벤트에 대해서만 방출한다.
print("-----elementAt-----")
let alertTwice = PublishSubject<String>()
alertTwice
.element(at: 2)
.subscribe (
onNext: {
print($0)
}
)
.disposed(by: disposeBag)
alertTwice.onNext("🛎")
alertTwice.onNext("🛎")
alertTwice.onNext("🔮")
alertTwice.onNext("🛎")
filter
ignoreElements, elements(at: ) 의 경우 Observable 의 요소들을 필터링 해서 방출하였다면,
filter 은 필터링 요구 사항이 한 가지 이상일 때 클로저 구문 내에서 predicate 이라는 요청 사항을 추가 후 적용할 수 있다.
print("-----filter-----")
Observable.of(1,2,3,4,5,6,7,8) // [1,2,3,4,5,6,7,8]
.filter { $0 % 2 == 0 && $0 < 5 }
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
-----filter-----
2
4
skip
첫번째 요소부터 n 개의 요소를 무시할 수 있다.
print("-----skip-----")
Observable.of("👍", "👎", "👊", "👈", "💙")
.skip(4)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
-----skip-----
💙
skipWhile
어떤 요소를 skip 하지 않을 때까지 skip 하고 종료한다. skip 할 조건문을 while 문 안에 넣는다.
Observable.of("😀", "😃", "😄", "🤓", "😎", "🐶", "😀", "😃")
.skip(while: {
$0 != "🐶"
})
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
-----skipWhile-----
🐶
😀
😃
skipUntil
고정 조건에서 이루어진 이전 필터링과 달리 다른 Observable 에 기반한 요소들과 다이나믹하게 필터링할 때 사용한다.
현재 Observable 인 "손님" 이 "문여는 시간" 이라는 다른 Observable 이 시동할 때 (onNext 이벤트를 방출하기 전) 까지 모든 이벤트를 무시한다.
print("--------skipUntil--------")
let 손님 = PublishSubject<String>()
let 문여는시간 = PublishSubject<String>()
손님
.skip(until: 문여는시간)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
손님.onNext("😀")
손님.onNext("😃")
문여는시간.onNext("땡")
손님.onNext("😎")
--------skipUntil--------
😎
take
skip 과 반대 개념으로, 어떤 요소를 취하고 싶을 때 이 연산자를 사용한다. 표현한 만큼의 값만 출력하고 그 이후는 무시한다.
print("--------take--------")
Observable.of("🥇", "🥈", "🥉", "🤓", "😎")
.take(3)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
--------take--------
🥇
🥈
🥉
takeWhile
true 에 해당하는 값을 방출한다.
print("--------takeWhile--------")
Observable.of("🥇", "🥈", "🥉", "🤓", "😎")
.take(while: {
$0 != "🥉"
})
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
--------takeWhile--------
🥇
🥈
enumerated
방출된 요소의 Index 를 참고하고 싶을 때 사용한다. 기존에 요소들만 방출했다면, 각 요소들의 인덱스 값을 포함하는 튜플을 방출한다.
print("--------enumerated--------")
Observable.of("🥇", "🥈", "🥉", "🤓", "😎")
.enumerated()
.take(while: {
$0.index < 3
})
.subscribe(onNext: {
print("\($0.index + 1)번째 선수 \($0.element)메달")
})
.disposed(by: disposeBag)
--------enumerated--------
1번째 선수 🥇메달
2번째 선수 🥈메달
3번째 선수 🥉메달
takeUntil
trigger 가 되는 Observable (신청 마감) 이 구독되기 전까지의 이벤트 값만 받는다.
print("--------takeUntil--------")
let 수강신청 = PublishSubject<String>()
let 신청마감 = PublishSubject<String>()
수강신청
.take(until: 신청마감)
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
수강신청.onNext("🙋🏼♀️")
수강신청.onNext("🙋🏻♂️")
신청마감.onNext("끝!")
수강신청.onNext("🙋🏻")
--------takeUntil--------
🙋🏼♀️
🙋🏻♂️
distinctUntilChanged
연달아 같은 값이 이어질 때 중복된 값을 막아주는 역할을 하는 연산자이다.
print("--------distinctUntilChanged--------")
Observable.of("저는", "저는", "앵무새", "앵무새", "앵무새", "입니다", "입니다", "입니다", "저는", "앵무새", "일까요?", "일까요?")
.distinctUntilChanged()
.subscribe(onNext: {
print($0)
})
.disposed(by: disposeBag)
--------distinctUntilChanged--------
저는
앵무새
입니다
저는
앵무새
일까요?
' iOS > RxSwift' 카테고리의 다른 글
RxSwift - MVVM 디자인 패턴 (0) | 2022.11.05 |
---|---|
RxSwift - Transforming (0) | 2022.11.02 |
RxSwift - Subject (0) | 2022.11.01 |
RxSwift - Traits (Single, Maybe, Completable) (0) | 2022.10.31 |
RxSwift - Observable 과 dispose / disposeBag (0) | 2022.10.24 |