Swift编程iOSiOS程序猿

iOS 监听网络状态变化的方式 NWPathMonitor

2024-03-25  本文已影响0人  zackzheng

iOS 监听网络状态变化有多种方式,iOS 12 之后系统提供了 Network 框架,可以更加方便地监听网络状态变化。

let monitor = NWPathMonitor()
monitor.pathUpdateHandler = { path in

    DispatchQueue.main.async {

        switch path.status {
        case .satisfied: // 已连接
            break
        case .unsatisfied:
            break
        case .requiresConnection:
            break
        }
    }
}
let queue = DispatchQueue(label: "Monitor")
monitor.start(queue: queue)

调用 start 之后,网络状态变化就会调用 pathUpdateHandler。第一次调用后也会立即触发回调。

@available(macOS 10.14, iOS 12.0, watchOS 5.0, tvOS 12.0, *)
final public class NWPathMonitor {
...
}

可以看到,NWPathMonitor 需要 iOS 12.0 以上才能调用。

public enum Status : Sendable {

    /// The path has a usable route upon which to send and receive data
    case satisfied

    /// The path does not have a usable route. This may be due to a network interface being down, or due to system policy.
    case unsatisfied

    /// The path does not currently have a usable route, but a connection attempt will trigger network attachment.
    case requiresConnection
}

satisfied 表示可以发送和接收数据;unsatisfied 表示不可用,可能由于网络故障或系统策略等;requiresConnection 表示当前不可用,但是会触发网络连接,一般是第一次启动的时候。

如果想要监听具体某一种网络,可以在初始化时指定。

let monitor = NWPathMonitor(requiredInterfaceType: .wifi)

可以指定的类型如下:

public enum InterfaceType : Sendable {

    /// A virtual or otherwise unknown interface type
    case other

    /// A Wi-Fi link
    case wifi

    /// A Cellular link
    case cellular

    /// A Wired Ethernet link
    case wiredEthernet

    /// The Loopback Interface
    case loopback
}

如果想要取消监听,可以调用 cancel 方法。

monitor.cancel()
上一篇 下一篇

猜你喜欢

热点阅读