Swift 网络监视器切换 .satisfied 和 .unsatisfied 状态

Sam*_*nti 5 ios swift

我正在尝试监控 iOS 应用程序的网络访问。

当我第一次在 WiFi 打开的情况下运行模拟器时,我收到正确的消息“我们已连接!”。

但是当我关闭 wifi 时,我收到相同的消息“我们已连接!”。

如果我再次打开它,我会收到“无连接”。信息。

如果我继续打开和关闭网络,我会得到与 wifi 实际状态相反的状态。

有什么想法我做错了什么吗?这是代码:

import Foundation
import Network

final class NetworkMonitor: ObservableObject {
    
    let queue = DispatchQueue(label: "NetworkMonitor")
    let monitor = NWPathMonitor()
    
    init() {
        monitor.pathUpdateHandler = { path in
            if path.status == .satisfied {
                print("We're connected!")
            } else {
                print("No connection.")
            }
        }
        monitor.start(queue: queue)
    }
    
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*nti 1

@tromgy 是对的,问题中的代码似乎可以在实际设备上运行,但我将在这里发布我的解决方法。

注意:模拟器的环境检查对我来说似乎是可选的,但如果您有不同的意见,请告诉我。

import Foundation
import Network

final class NetworkMonitor: ObservableObject {

    static let shared = NetworkMonitor()
    let queue = DispatchQueue(label: "NetworkMonitor")
    let monitor = NWPathMonitor()
    @Published public private(set) var isConnected: Bool = false
    private var hasStatus: Bool = false
    
    init() {
        monitor.pathUpdateHandler = { path in
            #if targetEnvironment(simulator)
                if (!self.hasStatus) {
                    self.isConnected = path.status == .satisfied
                    self.hasStatus = true
                } else {
                    self.isConnected = !self.isConnected
                }
            #else
                self.isConnected = path.status == .satisfied
            #endif
            print("isConnected: " + String(self.isConnected))
        }
        monitor.start(queue: queue)
    }

}
Run Code Online (Sandbox Code Playgroud)