[英]How to test for iPhone connection to internet with swift 4?
對於Swift 4 / xcode:
我已經在互聯網上搜尋該問題的解決方案,但是我還沒有找到一個涵蓋所有基礎的確定而全面的答案。 Stack上有幾個可以在某種程度上回答問題的方法,包括快速的特定答案,例如這些或AshleyMills Reachability ,但其中許多都是過時且不全面的。
1.我想要一種方法來檢查互聯網連接 ,而不僅僅是連接到wifi。 幾種在線方法僅檢查與Wi-Fi的連接,但不確認可通過wifi上網。 我想要一種僅在檢測到互聯網連接時才返回true的方法。
2.對於蜂窩數據使用,此方法還必須返回true。 是的,Wi-Fi可以提供互聯網連接,但數據也可以提供互聯網連接。 如果同時提供一個或兩個蜂窩/ wifi互聯網,則此方法必須足夠全面才能返回true。
最后,請注意。 網上沒有一個完整的快速答案可以檢查所有問題,這一事實使我想知道,從更一般的意義上講,我對這個問題的處理方式是否不正確。 我的應用程序需要從數據庫加載數據,這就是為什么它需要Internet連接。 對於當今的流行應用程序來說,這是非常普遍的事情。 應用程序不會因嘗試在沒有互聯網連接的情況下加載數據而崩潰。 我在想他們所做的事情(這是此問題的基礎)如下:
if doesHaveInternetConnection{
//run loading data functions
}else{
//don't run loading data functions
}
這不是完成的方式嗎? 如果沒有,解決這個問題的更好方法是什么?
這是發出網絡請求時URLError
的列表。 在列表中,有一個名為notConnectedToInternet
的枚舉值。 當您發出網絡請求而失敗時,請查看錯誤代碼以查找是否是由於沒有連接或其他原因所致。
或者,您可以在服務器上托管health-check
端點。 在發出任何請求之前,請向該端點發出請求。 如果請求成功,您可以放心互聯網連接。 雖然,我強烈建議您選擇第一個選項。
例
注意:以下代碼在Swift 3中。
URLSession.shared.dataTask(with: *URLRequest*) { (data, response, error) -> Void in
if error != nil {
if let e = error as? URLError, e.code == .notConnectedToInternet {
//Not connected to internet
} else {
//Some other error
}
} else {
//The request was successful
}
}.resume()
在Swift 4中使用Alamofire檢查合作伙伴
import Foundation
import Alamofire
class Connectivity {
class func isConnectedToInternet() ->Bool {
return NetworkReachabilityManager()!.isReachable
}
}
然后調用這個函數
if Connectivity.isConnectedToInternet() {
print("Yes! internet is available.")
// do some tasks..
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.