基于 Apple 的 NWPathMonitor
的网络连接性。
你可以通过将 swift-reachability
作为软件包添加到你的 Xcode 项目中。
如果你想在 SwiftPM 项目中使用 swift-reachability
,只需将其添加到你的 Package.swift
文件中即可
dependencies: [
.package(url: "https://github.com/mihai8804858/swift-reachability", from: "1.0.0")
]
然后将产品添加到任何需要访问该库的目标中
.product(name: "SwiftReachability", package: "swift-reachability"),
Reachability
实例,或者使用提供的 Reachability.shared
实例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:
...
}
查看 ConnectionStatus、ConnectionType 和 DisconnectedReason 以获取更多信息。
路径是否使用了被认为是昂贵的接口,例如蜂窝网络或个人热点。
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。