[swift] 동적으로 인터넷 연결 상태를 업데이트하는 방법

앱을 개발하다보면 사용자의 인터넷 연결 상태를 확인하고 해당 상태에 따라 동적으로 액션을 취해야 할 때가 있습니다. 이 글에서는 Swift를 사용하여 동적으로 인터넷 연결 상태를 감지하고 업데이트하는 방법에 대해 알아보겠습니다.

1. Reachability 클래스 사용하기

Reachability는 인터넷 연결의 상태를 감지하는 기능을 제공하는 클래스입니다. Cocoapods를 사용하여 Reachability 라이브러리를 프로젝트에 추가해두었다면, 다음과 같이 Reachability 클래스를 사용할 수 있습니다.

import Reachability

class ViewController: UIViewController {
    let reachability = try! Reachability()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        NotificationCenter.default.addObserver(self, selector: #selector(networkStatusChanged), name: .reachabilityChanged, object: nil)
        
        do {
            try reachability.startNotifier()
        } catch {
            print("Could not start notifier")
        }
    }
    
    @objc func networkStatusChanged(notification: Notification) {
        let reachability = notification.object as! Reachability
        
        if reachability.connection == .wifi {
            print("Connected via WiFi")
        } else if reachability.connection == .cellular {
            print("Connected via Cellular")
        } else {
            print("No internet connection")
        }
    }
}

위의 예시에서는 Reachability 클래스의 인스턴스를 생성하고, 앱 실행 시 startNotifier를 호출하여 앱에서 인터넷 연결 상태의 변경을 감시합니다. 연결 상태의 변경을 감지하는 메서드인 networkStatusChanged를 구현하여 상태가 변경될 때마다 원하는 액션을 취하도록 할 수 있습니다.

2. NWPathMonitor 사용하기

iOS 12부터는 Reachability 대신 NWPathMonitor를 사용하여 인터넷 연결 상태를 확인할 수 있습니다. 아래는 NWPathMonitor를 사용하여 동적으로 인터넷 연결 상태를 업데이트하는 예시 코드입니다.

import Network

class ViewController: UIViewController {
    let monitor = NWPathMonitor()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        monitor.pathUpdateHandler = { path in
            if path.status == .satisfied {
                print("Connected")
            } else if path.status == .unsatisfied {
                print("No internet connection")
            } else if path.status ==
                .requiresConnection {
                print("Connection required")
            }
        }
        
        let queue = DispatchQueue(label: "NetworkMonitor")
        monitor.start(queue: queue)
    }
}

위의 예시에서는 NWPathMonitor 클래스의 인스턴스를 생성하고, pathUpdateHandler 클로저를 사용하여 인터넷 연결 상태의 변경을 처리합니다. 연결 상태가 변경되면 해당 클로저가 호출되므로, 필요한 액션을 취할 수 있습니다.

결론

Swift를 사용하여 동적으로 인터넷 연결 상태를 업데이트하는 방법에 대해 알아보았습니다. Reachability나 NWPathMonitor를 사용하여 인터넷 연결 상태를 감지하고, 연결 상태에 따라 원하는 액션을 취할 수 있습니다. 개발하는 앱의 요구에 맞게 적절한 방법을 선택하여 사용하면 됩니다.