[swift] SwiftEventBus를 사용하여 앱이 백그라운드/포그라운드로 전환되는 이벤트 처리하는 방법은 어떻게 되는가?

iOS 앱에서 앱이 백그라운드 또는 포그라운드로 전환될 때마다 특정 로직을 처리하고 싶을 때가 있습니다. SwiftEventBus라는 라이브러리를 사용하면 이러한 이벤트 처리를 쉽게 구현할 수 있습니다.

이제 SwiftEventBus를 사용하여 앱의 백그라운드/포그라운드 전환 이벤트를 처리하는 방법에 대해 알아보겠습니다.

1. SwiftEventBus 설치하기

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

pod 'SwiftEventBus'

그리고 터미널에서 pod install 명령어를 실행하여 설치합니다.

2. SwiftEventBus 설정하기

SwiftEventBus를 사용하려면 먼저 이벤트를 등록하고 처리하는 코드를 작성해야 합니다.

import SwiftEventBus

// 백그라운드 이벤트 핸들러 등록
NotificationCenter.default.addObserver(self, selector: #selector(appDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)

// 포그라운드 이벤트 핸들러 등록
NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)

@objc private func appDidEnterBackground() {
    // 백그라운드 진입 시 처리할 로직 작성
    SwiftEventBus.post("appDidEnterBackground")
}

@objc private func appWillEnterForeground() {
    // 포그라운드 진입 시 처리할 로직 작성
    SwiftEventBus.post("appWillEnterForeground")
}

위의 코드에서 appDidEnterBackground 함수는 앱이 백그라운드로 전환될 때 호출되는 핸들러입니다. 마찬가지로, appWillEnterForeground 함수는 앱이 포그라운드로 전환될 때 호출되는 핸들러입니다.

이벤트 핸들러 내부에서는 SwiftEventBus.post("이벤트명")를 사용하여 해당 이벤트를 발생시킬 수 있습니다. 여기서는 “appDidEnterBackground”와 “appWillEnterForeground”라는 이벤트를 발생시킵니다.

3. 이벤트 수신하기

이벤트를 수신하려면 다음과 같이 SwiftEventBus.onMainThread(target: Any, name: String, sender: AnyObject? = nil, handler: (ResultType?) -> Void) 함수를 호출하여 이벤트를 구독해야 합니다.

SwiftEventBus.onMainThread(target: self, name: "appDidEnterBackground") { result in
    // 백그라운드 이벤트 발생시 실행될 로직 작성
}

SwiftEventBus.onMainThread(target: self, name: "appWillEnterForeground") { result in
    // 포그라운드 이벤트 발생시 실행될 로직 작성
}

위의 코드에서 target은 이벤트 핸들러가 호출될 대상을 의미하며, 여기서는 self를 사용하여 현재 객체에 이벤트 핸들러를 등록합니다. name은 이벤트의 이름을 나타내며, 위에서 등록한 이벤트 이름과 일치해야 합니다. handler는 이벤트가 발생했을 때 실행될 클로저를 정의합니다.

4. 이벤트 등록 해제하기

이벤트를 더 이상 수신하지 않으려면 다음과 같이 SwiftEventBus.unregister(target: Any) 함수를 호출하여 이벤트 등록을 해제할 수 있습니다.

SwiftEventBus.unregister(target: self)

위의 코드에서 target에는 이벤트 등록을 해제할 대상을 지정합니다. 여기서는 self로 현재 객체를 지정합니다.

이제 앱이 백그라운드 또는 포그라운드로 전환될 때 SwiftEventBus를 사용하여 원하는 로직을 처리할 수 있습니다.

참고 자료