Using Apple's Reachability to check remote server reachability in Swift

前端 未结 4 1635
灰色年华
灰色年华 2020-12-09 04:29

I\'m developing an iOS application written in Swift that communicates with a HTTP server on the local network, and I\'m using Apple\'s Reachability class to determine wether

4条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-09 05:08

    Using combine and Reachability:

    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 }
    
                os_log("Unreachable")
    
                self.reachable = false
                self.reachableViaWifi = false
                self.reachableViaCellular = false
            }
    
            do {
                try reachability.startNotifier()
            } catch {
                os_log("Unable to start reachability notifier.")
            }
        }
    }
    

提交回复
热议问题