Почему path.status неправильно сообщает о состоянии сетевого подключения в моем приложении Swift?
У меня есть быстрый код, который использует сетевую структуру, чтобы определить, доступно ли сетевое подключение или нет. Если у меня включен Wi-Fi, и я запускаю свой код, мой код сообщает, что это так, и если я затем отключаю свой Wi-Fi, мой код сообщает, что это снова. Но затем, если я снова включу свой Wi-Fi, сообщается как
.unsatisfied
затем через секунду он сообщает об этом как
.satisfied
. Что, черт возьми, происходит? я бы ожидал
path.status
чтобы изменить сразу, когда Wi-Fi выключен и включен и выключен и т. д.
Вот мой класс NetworkServices;
final class NetworkServices {
static let sharedInstance = NetworkServices()
private let queue = DispatchQueue.global(qos: .background)
private let monitor: NWPathMonitor
public private(set) var isConnected: Bool = false
public private(set) var connectionType: ConnectionType = .unknown
enum ConnectionType {
case wifi
case cellular
case wiredEthernet
case unknown
}
private init() {
monitor = NWPathMonitor()
}
public func startMonitoring() {
monitor.start(queue: queue)
monitor.pathUpdateHandler = { [weak self] path in
self?.isConnected = path.status == .satisfied
print("DEBUG: path.status = \(path.status); isConnected = \(self!.isConnected)")
self?.getConnectionType(path)
}
}
public func stopMonitoring() {
monitor.cancel()
}
private func getConnectionType(_ path: NWPath) {
if path.usesInterfaceType(.wifi) {
connectionType = .wifi
} else if path.usesInterfaceType(.cellular) {
connectionType = .cellular
} else if path.usesInterfaceType(.wiredEthernet) {
connectionType = .wiredEthernet
} else {
connectionType = .unknown
}
}
}
я звоню
startMonitoring
метод в моем файле AppDelegate
didFinishLaunchingWithOptions
метод
2 ответа
Когда вы включаете Wi-Fi, он уведомляет о
NWPath
обновление, но до тех пор, пока соединение не установлено, для подключения требуется некоторое время.
PathUpdateHandler не работает должным образом в симуляторе iOS, но работает должным образом на реальном устройстве.