How to use NetworkReachabilityManager in Alamofire

前端 未结 10 1384
醉酒成梦
醉酒成梦 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:18

    SWIFT 5

    NetworkState Structure

    import Foundation
    import Alamofire
    
    struct NetworkState {
    
        var isInternetAvailable:Bool
        {
            return NetworkReachabilityManager()!.isReachable
        }
    }
    

    Use: -

      if (NetworkState().isInternetAvailable) {
            // Your code here
       }
    
    0 讨论(0)
  • 2020-12-02 15:19

    Here's my implementation. I use it in a singleton. Remember to hold on to the reachability manager reference.

    let reachabilityManager = Alamofire.NetworkReachabilityManager(host: "www.apple.com")
    
    func listenForReachability() {
        self.reachabilityManager?.listener = { status in
            print("Network Status Changed: \(status)")
            switch status {
            case .NotReachable:
                //Show error state
            case .Reachable(_), .Unknown:
                //Hide error state
            }
        }
    
        self.reachabilityManager?.startListening()
    }
    
    0 讨论(0)
  • 2020-12-02 15:21

    Using a singleton is working as I long as you keep a reference of reachabilityManager

    class NetworkStatus {
    static let sharedInstance = NetworkStatus()
    
    private init() {}
    
    let reachabilityManager = Alamofire.NetworkReachabilityManager(host: "www.apple.com")
    
    func startNetworkReachabilityObserver() {
        reachabilityManager?.listener = { status in
    
            switch status {
    
            case .notReachable:
                print("The network is not reachable")
    
            case .unknown :
                print("It is unknown whether the network is reachable")
    
            case .reachable(.ethernetOrWiFi):
                print("The network is reachable over the WiFi connection")
    
            case .reachable(.wwan):
                print("The network is reachable over the WWAN connection")
    
            }
        }
        reachabilityManager?.startListening()
    }
    

    So you can use it like this anywhere in your app:

    let networkStatus = NetworkStatus.sharedInstance
    
    override func awakeFromNib() {
        super.awakeFromNib()
        networkStatus.startNetworkReachabilityObserver()
    }
    

    You will be notified of any change in your network status. Just for icing on the cake this is a very good animation to show on your internet connection loss.

    0 讨论(0)
  • 2020-12-02 15:24

    NetworkManager Class

    class NetworkManager {
    
    //shared instance
    static let shared = NetworkManager()
    
    let reachabilityManager = Alamofire.NetworkReachabilityManager(host: "www.google.com")
    
    func startNetworkReachabilityObserver() {
    
        reachabilityManager?.listener = { status in
            switch status {
    
                case .notReachable:
                    print("The network is not reachable")
    
                case .unknown :
                    print("It is unknown whether the network is reachable")
    
                case .reachable(.ethernetOrWiFi):
                    print("The network is reachable over the WiFi connection")
    
                case .reachable(.wwan):
                    print("The network is reachable over the WWAN connection")
    
                }
            }
    
            // start listening
            reachabilityManager?.startListening()
       }
    }
    

    Start Network Reachability Observer

    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
            // add network reachability observer on app start
            NetworkManager.shared.startNetworkReachabilityObserver()
    
            return true
        }
    }
    
    0 讨论(0)
提交回复
热议问题