很多小伙伴在判断网络连接状态的时候引用了其它库,比如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哦.
有问题欢迎留言~ 我们一起探讨~ -
网友评论