[swift] Reachability를 사용해 네트워크 연결 상태가 변경되는 경우 동적 UI 업데이트하기

애플리케이션에서는 네트워크 연결 상태가 변경될 때마다 사용자에게 적절한 메시지나 동작을 제공하는 것이 중요합니다. 이를 위해 Reachability라는 라이브러리를 사용하여 네트워크 연결 상태를 감지하고, 이벤트가 발생할 때마다 동적으로 UI를 업데이트해보겠습니다.

Reachability 라이브러리 설치

Reachability는 네트워크 연결의 상태를 쉽게 확인할 수 있는 라이브러리입니다. 먼저, Cocoapods를 사용하여 Reachability를 설치해야 합니다. Podfile에 다음과 같이 Reachability를 추가하고, 터미널에서 pod install을 실행하여 설치합니다.

pod 'ReachabilitySwift'

Reachability 클래스를 활용한 네트워크 상태 감지

Reachability를 사용하여 네트워크의 상태를 감지하려면, Reachability 클래스의 인스턴스를 만들고 이벤트를 처리하기 위한 리스너를 등록해야 합니다. 아래는 간단한 예제입니다:

import Reachability

class NetworkManager {
    let reachability = try! Reachability()

    init() {
        NotificationCenter.default.addObserver(self, selector: #selector(networkStatusChanged(_:)), name: .reachabilityChanged, object: reachability)
        do {
            try reachability.startNotifier()
        } catch {
            print("Unable to start notifier")
        }
    }

    @objc func networkStatusChanged(_ notification: Notification) {
        let reachability = notification.object as! Reachability
        if reachability.connection != .unavailable {
            // 네트워크 연결이 가능한 상태일 때의 동작
            updateUIForConnectedState()
        } else {
            // 네트워크 연결이 불가능한 상태일 때의 동작
            updateUIForDisconnectedState()
        }
    }

    func updateUIForConnectedState() {
        // 네트워크 연결이 가능한 상태일 때 UI 업데이트
        print("네트워크 연결 상태: 연결됨")
    }

    func updateUIForDisconnectedState() {
        // 네트워크 연결이 불가능한 상태일 때 UI 업데이트
        print("네트워크 연결 상태: 연결되지 않음")
    }
}

let networkManager = NetworkManager()

위의 코드에서 NetworkManager 클래스는 Reachability 인스턴스를 생성하고, 네트워크 상태 변경 시 networkStatusChanged 메소드를 호출합니다. 이 메소드에서는 매개변수로 받은 Reachability 인스턴스의 connection 속성을 확인하여 UI 업데이트를 수행합니다.

이제 네트워크 상태가 변경될 때마다 적절한 UI 업데이트를 수행할 수 있게 됩니다.

참고 자료