Почему 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, но работает должным образом на реальном устройстве.

Другие вопросы по тегам