포스트

RxSwift 연산자 정리 ⑤ - TimeBased

TimeBased 연산자

TimeBased 연산자는 옵저버블이 시간의 흐름에 따라 특정 항목을 방출하게 하거나, 지연시킬 수 있는 연산자입니다. 대표적인 연산자로 interval, timeout, delay 연산자가 있습니다.

interval

메서드설명비고
interval(_ preiod:scheduler:)이 연산자는 옵저버블이 일정 주기마다 정수를 방출하도록 합니다.
take 연산자로 방출하는 항목을 제한하지 않는다면 무한정 방출하므로 주의가 필요합니다.
첫 번째 매개변수로 새로운 항목을 방출하게 할 RxTimeInterval 타입의 주기를 전달해야 합니다.
-
1
2
3
4
Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
    .take(10)
    .subscribe { print($0) }
    .disposed(by: disposeBag)

timer

메서드설명비고
timer(_ dueTime:preiod:scheduler:)이 연산자는 옵저버블이 일정 시간 지연 후 일정 주기마다 정수를 방출하도록 합니다.
take 연산자로 방출하는 항목을 제한하지 않는다면 무한정 방출하므로 주의가 필요합니다.
첫 번째 매개변수로 새로운 항목을 방출하기 전 RxTimeInterval 타입의 지연 시간을 전달해야 합니다.
두 번째 매개변수로 새로운 항목을 방출하게 할 RxTimeInterval 타입의 주기를 전달해야 합니다.
-
1
2
3
4
Observable<Int>.timer(.seconds(2), period: .seconds(1), scheduler: MainScheduler.instance)
    .take(10)
    .subscribe { print($0) }
    .disposed(by: disposeBag)

timeout

메서드설명비고
timeout(_ dueTime:other:scheduler:)이 연산자는 옵저버블이 마지막으로 항목을 방출한 후 일정 주기 동안 아무런 항목을 방출하지 않는다면 다른 옵저버블에서 방출하는 항목을 방출합니다.
첫 번째 매개변수로 RxTimeInterval 타입의 주기를 전달해야 합니다.
두 번째 매개변수로 타임아웃이 발생할 경우 대신 방출할 다른 옵저버블을 전달해야 합니다.
-
1
2
3
4
5
6
7
8
9
10
11
let subject = PublishSubject<Int>()
let otherSource = Observable<Int>.just(-1)

subject
    .timeout(.seconds(3), other: otherSource, scheduler: MainScheduler.instance)
    .subscribe { print($0) }
    .disposed(by: disposeBag)

Observable<Int>.timer(.seconds(5), scheduler: MainScheduler.instance)
    .subscribe { subject.onNext($0) }
    .disposed(by: disposeBag)

### delay

메서드설명비고
delay(_ dueTime:scheduler:)이 연산자는 옵저버블이 항목을 방출하는 시간을 지연시킵니다.
첫 번째 매개변수로 RxTimeInterval 타입의 지연 시간를 전달해야 합니다.
-
1
2
3
4
5
6
7
8
9
10
11
12
var currentTimeString: String {
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
    return formatter.string(from: Date())
}

Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
    .take(10)
    .debug()
    .delay(.seconds(5), scheduler: MainScheduler.instance)
    .subscribe { print(currentTimeString, $0) }
    .disposed(by: disposeBag)

### delaySubscription

메서드설명비고
delaySubscription(_ dueTime:other:scheduler:)이 연산자는 옵저버블옵저버를 구독하는 시점을 지연시킵니다.
첫 번째 매개변수로 RxTimeInterval 타입의 지연 시간를 전달해야 합니다.
-
1
2
3
4
5
6
Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
    .take(10)
    .debug()
    .delaySubscription(.seconds(5), scheduler: MainScheduler.instance)
    .subscribe { print(currentTimeString, $0) }
    .disposed(by: disposeBag)

참고 자료

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.