很多小伙伴在判斷網(wǎng)絡(luò)連接狀態(tài)的時(shí)候引用了其它庫超埋,比如Reachability等等. 但是我們是可以通過Alamofire進(jìn)行判斷的~引入這些庫就沒有必要了哦.
怎么用Alamofire來進(jìn)行網(wǎng)絡(luò)連接狀態(tài)的判斷呢?
Alamofire里面提供了NetworkReachabilityManager來管理網(wǎng)絡(luò)連接狀態(tài).
public enum NetworkReachabilityStatus {
case unknown
case notReachable
case reachable(ConnectionType)
}
這就是三種網(wǎng)絡(luò)狀態(tài):從上到下分別對應(yīng)呆贿,未知畏梆,無法連接,可連接
public enum ConnectionType {
case ethernetOrWiFi
case wwan
}
這是兩種連接類型:無線網(wǎng)絡(luò),移動網(wǎng)絡(luò)
public var isReachable: Bool { return isReachableOnWWAN || isReachableOnEthernetOrWiFi }
public var isReachableOnWWAN: Bool { return networkReachabilityStatus == .reachable(.wwan) }
public var isReachableOnEthernetOrWiFi: Bool { return networkReachabilityStatus == .reachable(.ethernetOrWiFi) }
可以通過這3個(gè)屬性, 來判斷當(dāng)前的網(wǎng)絡(luò)環(huán)境.
public var listener: Listener?
private var flags: SCNetworkReachabilityFlags? {
var flags = SCNetworkReachabilityFlags()
if SCNetworkReachabilityGetFlags(reachability, &flags) {
return flags
}
return nil
}
通過listener可以監(jiān)聽網(wǎng)絡(luò)變化哦屁擅,這樣看起來可能有點(diǎn)不夠明顯,舉一個(gè)實(shí)際應(yīng)用的例子吧~
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的产弹,當(dāng)然也可以不指定派歌,如果不指定的話,默認(rèn)就是監(jiān)聽的設(shè)備網(wǎng)絡(luò)狀態(tài).
最后痰哨,不要忘記在deinit方法中stopListening哦.
有問題歡迎留言~ 我們一起探討~ -