[swift] Reachability를 사용해 네트워크 연결 상태를 시각적으로 표시하기

네트워크 연결 상태는 앱에 필요한 중요한 기능입니다. 사용자가 인터넷에 연결되어 있는지 여부를 확인하고 이에 따라 적절한 조치를 취할 수 있도록 알려주어야 합니다. 이를 위해 Reachability 라이브러리를 사용하여 네트워크 연결 상태를 감지하고 시각적으로 표시하는 방법을 알아보겠습니다.

Reachability 라이브러리 설치

Reachability 라이브러리는 네트워크 연결 상태를 감지하기 위한 유용한 도구입니다. Cocoapods를 사용하여 라이브러리를 설치할 수 있습니다.

pod 'ReachabilitySwift'

터미널을 열고 프로젝트의 루트 디렉토리로 이동한 후, 다음 명령을 실행하여 라이브러리를 설치합니다.

$ pod install

Reachability 클래스 활용

Reachability 클래스는 간편하게 사용할 수 있는 네트워크 상태 감지 기능을 제공합니다. 해당 클래스를 사용하여 네트워크 연결 상태를 확인하고, 이를 시각적으로 표시하는 방법을 살펴보겠습니다.

import Reachability

// Reachability 객체 생성
let reachability = try! Reachability()

// 네트워크 상태 변경 시 호출될 메서드
@objc func reachabilityChanged(notification: Notification) {
    let reachability = notification.object as! Reachability
    switch reachability.connection {
    case .wifi:
        // WiFi 연결 상태임을 표시
        print("WiFi 연결 상태입니다.")
    case .cellular:
        // 셀룰러 연결 상태임을 표시
        print("셀룰러 연결 상태입니다.")
    case .none:
        // 연결 없음을 표시
        print("연결이 없습니다.")
    }
}

// Reachability 감지 시작
try! reachability.startNotifier()

// 네트워크 상태 변경 알림 등록
NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged),
                                       name: Notification.Name.reachabilityChanged, object: reachability)

위의 코드는 Reachability 객체를 생성하고, 네트워크 연결 상태 변경 시 호출되는 메서드를 정의한 예시입니다. 네트워크 연결 상태에 따라 적절한 동작을 추가로 구현하면 됩니다.

시각적인 표시

네트워크 연결 상태를 시각적으로 표시하기 위해 아래와 같이 UI를 구성하고, 위 코드와 연동하여 상태에 따라 UI를 업데이트 할 수 있습니다.

// 네트워크 상태에 따른 UI 업데이트
func updateUI(for connection: Reachability.Connection) {
    switch connection {
    case .wifi:
        statusLabel.text = "WiFi 연결 상태입니다."
        statusImageView.image = UIImage(named: "wifi")
    case .cellular:
        statusLabel.text = "셀룰러 연결 상태입니다."
        statusImageView.image = UIImage(named: "cellular")
    case .none:
        statusLabel.text = "연결이 없습니다."
        statusImageView.image = UIImage(named: "no-connection")
    }
}

// 네트워크 상태 변경 시 호출될 메서드
@objc func reachabilityChanged(notification: Notification) {
    let reachability = notification.object as! Reachability
    updateUI(for: reachability.connection)
}

위의 코드는 네트워크 연결 상태에 따라 UI를 업데이트하는 예시입니다. 상태에 따라 적절한 이미지와 텍스트를 표시할 수 있도록 합니다.

참고 자료

이렇게 Reachability 라이브러리를 사용하여 네트워크 연결 상태를 감지하고 시각적으로 표시할 수 있습니다. 사용자에게 네트워크 상태를 알려주는 것은 앱의 사용성을 향상시키는 데 큰 도움이 됩니다.