很多小伙伴在判断网络连接状态的时候引用了其它库,比如Reachability等等. 但是我们是可以通过Alamofire进行判断的~引入这些库就没有必要了哦.
怎么用Alamofire来进行网络连接状态的判断呢?
Alamofire里面提供了NetworkReachabilityManager来管理网络连接状态.
    public enum NetworkReachabilityStatus {
        case unknown
        case notReachable
        case reachable(ConnectionType)
    }
这就是三种网络状态:从上到下分别对应,未知,无法连接,可连接
    public enum ConnectionType {
        case ethernetOrWiFi
        case wwan
    }
这是两种连接类型:无线网络,移动网络
    public var isReachable: Bool { return isReachableOnWWAN || isReachableOnEthernetOrWiFi }
    public var isReachableOnWWAN: Bool { return networkReachabilityStatus == .reachable(.wwan) }
    public var isReachableOnEthernetOrWiFi: Bool { return networkReachabilityStatus == .reachable(.ethernetOrWiFi) }
可以通过这3个属性, 来判断当前的网络环境.
    public var listener: Listener?
    private var flags: SCNetworkReachabilityFlags? {
        var flags = SCNetworkReachabilityFlags()
        if SCNetworkReachabilityGetFlags(reachability, &flags) {
            return flags
        }
        return nil
    }
通过listener可以监听网络变化哦,这样看起来可能有点不够明显,举一个实际应用的例子吧~
let reachabilityManager = 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()
}
可以看出reachability是可以指定host的,当然也可以不指定,如果不指定的话,默认就是监听的设备网络状态.
最后,不要忘记在deinit方法中stopListening哦.
有问题欢迎留言~ 我们一起探讨~ -










