How to use NetworkReachabilityManager in Alamofire

前端 未结 10 1446
醉酒成梦
醉酒成梦 2020-12-02 14:31

I want functionality similar to AFNetworking in Objective-C with Alamofire NetworkReachabilityManager in Swift:

//Reachability detection
[[AFNet         


        
10条回答
  •  时光说笑
    2020-12-02 15:05

    Alamofire 5 and above

    import Alamofire
    
    // MARK: NetworkReachability
    
    final class NetworkReachability {
        
        static let shared = NetworkReachability()
    
        private let reachability = NetworkReachabilityManager(host: "www.apple.com")!
    
        typealias NetworkReachabilityStatus = NetworkReachabilityManager.NetworkReachabilityStatus
    
        private init() {}
        
        /// Start observing reachability changes
        func startListening() {
            reachability.startListening { [weak self] status in
                switch status {
                case .notReachable:
                    self?.updateReachabilityStatus(.notReachable)
                case .reachable(let connection):
                    self?.updateReachabilityStatus(.reachable(connection))
                case .unknown:
                    break
                }
            }
        }
        
        /// Stop observing reachability changes
        func stopListening() {
            reachability.stopListening()
        }
        
        
        /// Updated ReachabilityStatus status based on connectivity status
        ///
        /// - Parameter status: `NetworkReachabilityStatus` enum containing reachability status
        private func updateReachabilityStatus(_ status: NetworkReachabilityStatus) {
            switch status {
            case .notReachable:
                print("Internet not available")
            case .reachable(.ethernetOrWiFi), .reachable(.cellular):
                print("Internet available")
            case .unknown:
                break
            }
        }
    
        /// returns current reachability status
        var isReachable: Bool {
            return reachability.isReachable
        }
    
        /// returns if connected via cellular
        var isConnectedViaCellular: Bool {
            return reachability.isReachableOnCellular
        }
    
        /// returns if connected via cellular
        var isConnectedViaWiFi: Bool {
            return reachability.isReachableOnEthernetOrWiFi
        }
    
        deinit {
            stopListening()
        }
    }
    

    How to use:

    Call NetworkReachability.shared. startListening() from AppDelegate to start listening for reachability changes

    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
                
        var window: UIWindow?
               
                
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
                 
            NetworkReachability.shared.startListening()
            
            // window and rootviewcontroller setup code
            
            return true
        }
            
    }
       
    

提交回复
热议问题