如何使用swift 4测试iPhone与互联网的连接?

时间:2017-11-01 02:43:27

标签: swift reachability reachability-swift

对于Swift 4 / xcode:
我已经在互联网上搜索了这个问题的解决方案,但我还没有找到涵盖所有基础的明确,全面的答案。 Stack上有几个在某种程度上回答了这个问题,包括theseAshleyMills Reachability等快速具体的答案,但很多都是陈旧而不全面的。
1.我希望该方法检查互联网连接,而不是只是连接到wifi。在线的几种方法只是检查与Wi-Fi的连接,但不确认通过wifi可以上网。如果检测到互联网连接,我想要一个返回true的方法 2.对于蜂窝数据使用,此方法必须返回true。是的Wi-Fi可以提供互联网连接,但数据也是如此。如果提供了蜂窝/无线互联网中的任何一个或两个,则该方法需要足够全面以返回真实 最后,一个说明。事实上,没有一个完整的快速回答在线检查所有的盒子让我想知道我对这个问题的处理是否在更一般意义上是不正确的。我的应用程序需要从数据库加载数据,这就是它需要互联网连接的原因。对于当今流行的应用程序来说,这是非常常见的事情。没有互联网连接,尝试加载数据时,应用不会崩溃。我在想他们做什么(这是这个问题的基础)是这样的:

if doesHaveInternetConnection{
    //run loading data functions
}else{
    //don't run loading data functions
}

这不是它的完成方式吗?如果没有,解决这个问题的更好方法是什么?

2 个答案:

答案 0 :(得分:2)

Here是发出网络请求时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()

答案 1 :(得分:2)

使用Alamofire检查interner,在Swift 4中

import Foundation
import Alamofire

class Connectivity {

   class func isConnectedToInternet() ->Bool {
        return NetworkReachabilityManager()!.isReachable
   }
}

然后调用此函数

if Connectivity.isConnectedToInternet() {
    print("Yes! internet is available.")
    // do some tasks..
}