RxSwift추가개념2-4

작성일

take

이것도 skip과 같이, 인덱스 번호를 적는것이 아니라, 개수를 적어야한다.
take(개수)를 적으면, 그 개수를 앞에서 부터 가져온다.

import UIKit
import RxCocoa
import RxSwift

let disposeBag = DisposeBag()

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

출력하면

1
2
3

이렇게만 출력된다.

takewhile

이렇게 작성하면 성공한것까지만 가져오고 그뒤에는 다 막혀버린다.

import UIKit
import RxCocoa
import RxSwift

let disposeBag = DisposeBag()

Observable.of(2,4,6,7,8,10)
    .take(while: {
        return $0 % 2 == 0
    }).subscribe(onNext: {
        print($0)
    }).disposed(by: disposeBag)

출력해보면

2
4
6

이 출력되지만 코드를 바꿔보면,

import UIKit
import RxCocoa
import RxSwift

let disposeBag = DisposeBag()

Observable.of(2,4,5,7,8,10)
    .take(while: {
        return $0 % 2 == 0
    }).subscribe(onNext: {
        print($0)
    }).disposed(by: disposeBag)

이렇게

2
4

2와 4만 출력되고 5부터는 막혀서 출력되지 않는다.

takeUntil

import UIKit
import RxCocoa
import RxSwift

let disposeBag = DisposeBag()

let subject = PublishSubject<String>()
let trigger = PublishSubject<String>()

subject.take(until: trigger)
    .subscribe(onNext: {
        print($0)
    }).disposed(by: disposeBag)

subject.onNext("1")
subject.onNext("2")

trigger.onNext("X")

subject.onNext("3")

trigger의 onNext가 실행이 되면서 그 뒤에있는 subject.onNext는 실행이 되지 않는다.
그전까지 출력을 하다가 trigger를 만나면 출력을 금지한다.

출력결과를 확인해보면,

1
2

이렇게 되있는걸 볼 수 있다.