Reachability.swift icon indicating copy to clipboard operation
Reachability.swift copied to clipboard

Combine example

Open mycroftcanner opened this issue 6 years ago • 0 comments
trafficstars

import Combine
import Reachability
import os

class ReachabilityStore: ObservableObject {
    private var reachability: Reachability

    @Published var reachable: Bool = false
    @Published var reachableViaWifi: Bool = false
    @Published var reachableViaCellular: Bool = false

    init() {
        reachability = try! Reachability()
        
        reachability.whenReachable = { [weak self] reachability in
            guard let self = self else { return }

            self.reachable = true
            self.reachableViaWifi = reachability.connection == .wifi
            self.reachableViaCellular = !self.reachableViaWifi

            os_log(
                "Reachable via %{public}s",
                self.reachableViaWifi ? "WiFi" : "Cellular"
            )
        }

        reachability.whenUnreachable = { [weak self] _ in
            guard let self = self else { return }

            self.reachable = false
            self.reachableViaWifi = false
            self.reachableViaCellular = false

            os_log("Unreachable")
        }

        do {
            try reachability.startNotifier()
        } catch {
            os_log("Unable to start reachability notifier.")
        }
    }
}

mycroftcanner avatar Nov 19 '19 11:11 mycroftcanner