RxSwift

[RxSwift] Filtering Operators (Taking)

thoonk: 2022. 1. 1. 20:51
반응형

Filtering Operators 중 Taking Operators에 관해 정리한 내용을 기록합니다.

 

Taking Operators

 

take

 

take 는 skip 의 반대 개념이며 처음부터 n 번째까지 방출할 수 있다.

 

Observable.of(1,2,3,4,5)
	.take(3)
	.subscribe(onNext: {
		print($0, terminator: " ")
	})
	.disposed(by: bag)

// 1 2 3

 

takeWhile

 

takeWhile body 내에서 설정한 로직에 따라 false 전까지만 방출한다.

skipWhile과 비슷하다. 

 

Observable.of(1,3,5,7,9)
    .enumerated()
    .take(while: { $0.index < 4 && $0.element % 2 == 1 })
    .subscribe(onNext: {
        print($0.element, terminator: " ")
    })
    .disposed(by: bag)

// 1 3 5 7

 

takeUntill

 

다른 Observable이 어떤 요소를 방출할 때까지 기존의 Observable의 요소를 방출한다.

skipUntil과 비슷하다.

 

let countDown = 10
Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
    .map { countDown - $0 }
		.take(until: { $0 == 0 }, behavior: .inclusive)
		.subscribe(onNext: {
		    print($0)
		}, onCompleted: {
				print("completed")
		})
		.disposed(by: bag)

/*
10
9
8
7
6
5
4
3
2
1
0
completed
*/

 

DistinctUntilChanged

 

연달아 중복된 값이 이어질 때 중복된 값을 제외하여 방출한다.

 

Observable.of(1,1,2,2,1,1)
    .distinctUntilChanged() 
    .subscribe(onNext: { 
		print($0, terminator: " ")
	})
	.disposed(by: bag)
// 1 2 1

 

부족한 점 피드백해주시면 감사합니다👍

반응형