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
이렇게 되있는걸 볼 수 있다.