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

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 以上才能调用。

  • status
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()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容