【发布时间】:2020-08-27 14:05:49
【问题描述】:
我有一个名为 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()
}
}
虽然在我禁用和启用 WiFi 时会调用 pathUpdateHandler,但结果并不总是可靠的。当我禁用 WiFi 时,当前路径是 unsatisfied (No network route),但是当我再次启用 WiFi 时,它会再次使用相同的路径 unsatisfied (No network route) 调用 pathUpdateHandler。
但是,在我的 UI 中,我有一个显示“重试”的按钮。当我按下它时,它将破坏当前的监视器并建立一个新的监视器。现在第一条消息显示satisfied (Path is satisfied), interface: en0。这意味着,WiFi 建立网络路由可能需要一些时间,但是当网络确实可用时,它没有再次调用 pathUpdateHandler。
【问题讨论】:
标签: swift nwpathmonitor