Swift 判断网络连接状态

很多小伙伴在判断网络连接状态的时候引用了其它库,比如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哦.

有问题欢迎留言~ 我们一起探讨~ -

你可能感兴趣的:(Swift 判断网络连接状态)