SwiftReachability

基于 Apple 的 NWPathMonitor 的网络连接性。

CI

安装

你可以通过将 swift-reachability 作为软件包添加到你的 Xcode 项目中。

https://github.com/mihai8804858/swift-reachability

如果你想在 SwiftPM 项目中使用 swift-reachability,只需将其添加到你的 Package.swift 文件中即可

dependencies: [
  .package(url: "https://github.com/mihai8804858/swift-reachability", from: "1.0.0")
]

然后将产品添加到任何需要访问该库的目标中

.product(name: "SwiftReachability", package: "swift-reachability"),

快速开始

private let reachability = Reachability.shared
let isConnected = reachability.status.isConnected
let isDisconnected = reachability.status.isDisconnected
switch reachability.status {
case .connected(let connectionType):
  ...
case .disconnected(let reason):
  ...
}
switch reachability.status.connectionType {
#if os(iOS)
case .cellular(_):
  ...
#endif
case .wifi:
  ...
case .wiredEthernet:
  ...
case .loopback:
  ...
case .unknown:
  ...
}

查看 ConnectionStatusConnectionTypeDisconnectedReason 以获取更多信息。

路径是否使用了被认为是昂贵的接口,例如蜂窝网络或个人热点。

let isExpensive = reachability.isExpensive

路径是否使用了低数据模式的接口。

let isConstrained = reachability.isConstrained
for await status in networkReachability.changes() {
  ...
}
for await isExpensive in networkReachability.expensiveChanges() {
  ...
}
for await isConstrained in networkReachability.constrainedChanges() {
  ...
}

Reachability 遵循 ObservableObject 协议,因此它可以轻松集成到 SwiftUI View 中,并在状态更改时自动更新 UI

struct ContentView: View {
  @ObservedObject private var reachability = Reachability.shared

  var body: some View {
    switch reachability.status {
    case .connected: Text("Connected")
    case .disconnected: Text("Disconnected")
    }
  }
}

许可证

此库基于 MIT 许可证发布。有关详细信息,请参阅 LICENSE