Skip to content

mihai8804858/swift-reachability

Repository files navigation

SwiftReachability

Network reachability based on Apple's NWPathMonitor.

CI

Installation

You can add swift-reachability to an Xcode project by adding it to your project as a package.

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

If you want to use swift-reachability in a SwiftPM project, it's as simple as adding it to your Package.swift:

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

And then adding the product to any target that needs access to the library:

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

Quick Start

  • Create an instance of Reachability, or use the provided Reachability.shared instance:
private let reachability = Reachability.shared
  • Check the connection status:
let isConnected = reachability.status.isConnected
let isDisconnected = reachability.status.isDisconnected
switch reachability.status {
case .connected(let connectionType):
  ...
case .disconnected(let reason):
  ...
}
  • Check the connection type:
switch reachability.status.connectionType {
#if os(iOS)
case .cellular(_):
  ...
#endif
case .wifi:
  ...
case .wiredEthernet:
  ...
case .loopback:
  ...
case .unknown:
  ...
}

See ConnectionStatus, ConnectionType and DisconnectedReason for more info.

  • Check network constraints:

Whether the path uses an interface that is considered expensive, such as Cellular or a Personal Hotspot.

let isExpensive = reachability.isExpensive

Whether the path uses an interface in Low Data Mode.

let isConstrained = reachability.isConstrained
  • Listen for changes:
for await status in networkReachability.changes() {
  ...
}
for await isExpensive in networkReachability.expensiveChanges() {
  ...
}
for await isConstrained in networkReachability.constrainedChanges() {
  ...
}
  • SwiftUI Support

Reachability conforms to ObservableObject so it can be easily integrated into SwiftUI View and automatically update the UI when status changes:

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

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

License

This library is released under the MIT license. See LICENSE for details.

About

Network reachability based on Apple's "NWPathMonitor"

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published