[swift] RxSwift를 사용한 타이머 처리 방법

RxSwift는 Swift에서 Reactive Programming을 구현하는 도구로써, 타이머와 같은 이벤트를 처리하는데 유용한 기능을 제공합니다. 이번 포스트에서는 RxSwift를 사용하여 타이머를 처리하는 방법에 대해 알아보겠습니다.

RxSwift 설치

RxSwift를 사용하기 위해 먼저 설치해야합니다. CocoaPods를 사용한다면, Podfile에 다음과 같이 추가합니다.

pod 'RxSwift', '~> 6.0'

그리고 터미널에서 다음 명령어를 실행하여 의존성을 설치합니다.

pod install

타이머 생성하기

RxSwift에서는 Observable 타입을 사용하여 타이머를 생성합니다. Observable은 이벤트 스트림을 나타내는데 사용되며, 특정 시간 간격마다 값을 방출하는 타이머를 생성할 수 있습니다.

다음은 1초마다 값을 방출하는 타이머를 생성하는 예시 코드입니다.

import RxSwift

let timer = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)

let subscription = timer.subscribe { event in
    switch event {
    case .next(let value):
        print(value)
    case .error(let error):
        print(error)
    case .completed:
        print("타이머 종료")
    }
}

위 코드에서는 interval 메서드를 사용하여 1초마다 값을 방출하는 타이머를 생성합니다. MainScheduler.instance는 메인 쓰레드에서 이벤트를 처리하기 위한 스케줄러입니다.

subscribe 메서드를 호출하여 생성한 타이머에 대한 이벤트를 구독하고, 이벤트 발생 시 처리할 로직을 작성합니다. 여기서는 next 이벤트에서 타이머 값을 출력하고, completed 이벤트에서는 “타이머 종료” 메시지를 출력합니다.

타이머 정지하기

RxSwift에서는 dispose 메서드를 호출하여 타이머를 정지시킬 수 있습니다. 아래 예시 코드에서는 5초 후에 타이머를 정지시키는 방법을 보여줍니다.

import RxSwift

let timer = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)

let subscription = timer.subscribe { event in
    switch event {
    case .next(let value):
        print(value)
    case .error(let error):
        print(error)
    case .completed:
        print("타이머 종료")
    }
}

DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
    subscription.dispose()
}

위 코드에서는 DispatchQueue.main.asyncAfter를 사용하여 5초 후에 dispose 메서드를 호출하여 타이머를 정지시킵니다.

결론

RxSwift는 Reactive Programming을 구현하는데 매우 유용한 도구입니다. 이를 사용하여 타이머와 같은 이벤트를 처리하는 것은 간단하고 효과적입니다. 위에서 소개한 방법을 참고하여 타이머를 사용해보세요.

참고 자료