#swift #nwpathmonitor
#swift #nwpathmonitor
Вопрос:
У меня есть простой класс с именем NetworkPathMonitor, который выглядит следующим образом:
class NetworkPathMonitor: ObservableObject, Cancellable {
@Published var path: NWPath? = nil
let monitor = NWPathMonitor()
init() {
monitor.pathUpdateHandler = { [weak self] path in
DispatchQueue.main.async {
self?.path = path
}
}
monitor.start(queue: DispatchQueue.global(qos: .background))
}
func cancel() {
monitor.cancel()
}
deinit {
cancel()
}
}
Хотя pathUpdateHandler
вызывается, когда я отключаю и включаю Wi-Fi, результат не всегда надежен. Когда я отключаю Wi-Fi, текущий путь является unsatisfied (No network route)
текущим, однако, когда я снова включаю Wi-Fi, он pathUpdateHandler
снова вызывает тот же путь unsatisfied (No network route)
.
Однако в моем пользовательском интерфейсе у меня есть кнопка с надписью Повторить попытку. Когда я нажимаю его, он уничтожает текущий монитор и создает новый. Теперь в первом сообщении говорится satisfied (Path is satisfied), interface: en0
. Это означает, что, возможно, Wi-Fi потребовалось некоторое время для установления сетевого маршрута, но когда сеть стала доступной, она больше не вызывалась pathUpdateHandler
.
Ответ №1:
Код действительно работал на реальном устройстве.
Не тестируйте NWPathMonitor
на симуляторе iOS, потому что это не даст вам надежного результата.