1

对于 Swift 4/xcode:
我已经在互联网上搜索了该问题的解决方案,但我还没有找到涵盖所有基础的明确、全面的答案。Stack 上有几个在一定程度上回答了这个问题,包括诸如这些AshleyMills Reachability之类的快速具体答案,但许多都是旧的且不全面的。
1.我想要检查互联网连接的方法,而不仅仅是连接到wifi。网上的一些方法只是检查 Wi-Fi 的连接,但不确认通过 wifi 可以访问互联网。我想要一种仅在检测到互联网连接时才返回 true 的方法。
2.此方法还必须对于蜂窝数据使用返回 true。是的,Wi-Fi 可以提供互联网连接,但数据也可以。如果提供了蜂窝/wifi 互联网中的一个或两个,则此方法需要足够全面才能返回 true。
最后,一个注释。在线没有完整的快速答案可以检查所有框的事实使我想知道我对这个问题的处理方法是否在更一般的意义上是不正确的。我的应用程序需要从数据库加载数据,这就是它需要互联网连接的原因。对于当今流行的应用程序来说,这是非常普遍的事情。应用程序不会因尝试在没有互联网连接的情况下加载其数据而崩溃。我认为他们所做的(这是这个问题的基础)是这样的:

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

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

4

2 回答 2

3

URLError是发出网络请求时的 s 列表。在列表中,有一个名为 的枚举值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()
于 2017-11-01T02:54:32.723 回答
2

在 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..
}
于 2018-03-10T14:46:09.223 回答