簡體   English   中英

如何使用Swift 4測試iPhone與互聯網的連接?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM