오늘 포스팅은 SwiftUI에서 네트워크 단절 대응 기능을 구현하였던 과정에 대해 서술해 볼까 합니다.
네트워크 연결 모니터링 클래스 NWPathMonitor
Swift에서 네트워크 단절 대응이라는 키워드를 구글링하면 나오는 키워드는 NWPathMonitor 클래스입니다.
이 클래스의 특징은 이름에서도 유추할 수 있다시피 네트워크 연결에 대해 실시간으로 모니터링해주는 클래스입니다.
이 기능은 iOS12이후 버전부터 사용 가능하다고 합니다.
네트워크 모니터링 구현
자 이제 그럼 네트워크 연결을 담당하는 클래스를 만들어 보겠습니다.
네트워크 모니터링 클래스 선언
우선 NWPathMonitor 클래스의 인스턴스를 선언해줍니다.
그리고 나서 네트워크 모니터링을 담당할 DispatchQueue를 선언해줍니다.
외부로 네트워크 연결 상태를 나타내는 isConnected 변수를 선언해줍니다.
모니터링 개시
네트워크 연결 상태 모니터링을 시작하고 그 결과를 외부로 반환해줍니다.
모니터링 취소
모니터링틀 취소하는 메서드를 정의해줍니다.
실제 적용
위 코드와 같이 현재 네트워크 상태를 나타내는 isConnected의 값에 따라 네트워크 오류 화면을 보여줍니다.
네트워크 모니터링 클래스 전체 코드
import SwiftUI
import Network
final class Network: ObservableObject {
// NWPathMonitor 클래스 인스턴스 선언
let monitor = NWPathMonitor()
// 네트워크 모니터링 담당 Thread
let queue = DispatchQueue(label: "Monitor")
@Published private(set) var isConnected: Bool = false
func checkConnection() {
// 모니터링 시작
monitor.start(queue: queue)
// 네트워크 연결 상태 모니터링 결과 반환
monitor.pathUpdateHandler = { path in
DispatchQueue.main.async { [weak self] in
guard let self else { return }
// 네트워크가 연결되어있다면 isConnected에 true 값 전달
isConnected = path.status == .satisfied
}
}
}
func stop() {
// 모니터링 취소
monitor.cancel()
}
}
참고 사이트
https://developer.apple.com/documentation/network/nwpathmonitor
https://medium.com/@desilio/how-to-check-internet-connection-with-swiftui-9426454027f5
'TIL' 카테고리의 다른 글
[TIL] 열거형 Equatable 프로토콜 준수로 대소 비교 구현(feat. Alert 문제 해결) (0) | 2024.07.19 |
---|---|
[TIL] Redux 패턴 간단 정리 (0) | 2024.06.26 |
[TIL] @AppStorage Custom Property Wrapper로 전환기 (0) | 2024.06.17 |
[TIL] 여러 Destination이 있을 때 화면 관리법 (0) | 2024.06.16 |
[TIL] 애플 소셜 로그인 구현기 (0) | 2024.06.13 |