넥스터즈에서 챙겨챙겨를 개발하면서 서버에 계속 접근하면서 데이터를 조회했는데, 네트워크가 조금이라도 불안정하거나 잠시라도 끊기면 기존 기념일이 화면에서 전부 사라지고 기념일 상세 조회를 하려고 하면 UI가 무너지기도 했다. 사용자 입장에서 너무 당황스러운 경험일 것 같아 네트워크 연결 상태를 확인해서 UI에 반영해주어야겠다고 생각했다.
import Foundation
import Network
final class NetworkMonitor: ObservableObject {
static let shared = NetworkMonitor()
private let networkMonitor = NWPathMonitor()
private let workerQueue = DispatchQueue(label: "Monitor")
var isConnected = false
init() {
networkMonitor.pathUpdateHandler = { path in
self.isConnected = path.status == .satisfied
}
networkMonitor.start(queue: workerQueue)
}
}
네트워크 변경을 감지하는 NWPathMonitor 객체를 생성하고, NetworkMonitor를 담을 스레드에 Monitor라는 레이블을 붙여 생성한다. 옵저버에서 네트워크 상테가 바뀐 것을 감지하면 isConnected에 상태값에 따라 부울값으로 업데이트하도록 초기화한다. 싱글톤으로 쓸거라 NetworkMonitor를 타입프로퍼티로 생성해주었다.
그러고 연결 상태 확인이 필요한 곳에서는 아래처럼 써주었다.
네트워크 연결이 없으면 UI 처리는 이렇게 해서 사용자에게 보여준다.
실시간으로 감지되는건 맞는데, 시뮬레이터에서는 실시간으로 반영이 안된다. breakpoint를 찍어서 디버깅해보면 잘 나오는데 UI 반영이 잘 안되었음. 실기기로 테스트해봤을 땐 적용이 너무너무 잘 된다! 버그인쥐,,
그리고 네트워크 연결 끊기면 상세 조회 액션은 실행되지 않도록 막아두었는데, 추가적인 알럿이 필요할지는 다시 의논한 후에 디자인이 나오면 수정할 것 같따
네트워크 상태 변경 감지하기 끗-