一次 Internet 连接检查 swift

One time Internet Connection Check swift

我需要检查一次用户的互联网连接。

我想到了类似 Device.isConnectedToTheInternet 的东西,但我没有找到类似的东西... 随着时间的推移,如果找到每个解决方案就像一个互联网监视器,但这并不是我所需要的。

有人出主意吗? 谢谢,Boothosh

参见NWPathMonitor().currentPath。它会告诉你当前的路径。这只是偶尔有用,因为“连接到互联网”不是一个有意义的条件。 “互联网”没有具体的定义。但是您可以使用 NWPath 来回答您可能正在寻找的一些问题。事实上,有一个 NSPath 可用并不意味着您实际上可以连接到“互联网”上的某些东西。 唯一 知道的方法是发送一个数据包并取回一个数据包。因此,如果您真正的问题是“我可以连接到特定主机吗”,那么您将需要向该主机发送数据包(这仍然不能证明您将来可以向该主机发送数据包)。

综上所述,询问“如果我尝试连接,它肯定会失败吗?”有一点 UI 级的用处。 currentPath 可以帮助您回答这个问题。它只是不能告诉你它是否会成功。

正如 Rob Napier 所提到的,看起来唯一可用的是 NWPathMonitor,您可以使用它来检查 'connectivity' 到某个位置,例如 www.google.com, or something else that would be relatively trustworthy to be available 24/7, or just the URL you are about to try and use. Here is a short HackingWithSwift tutorial 用于 NWPathMonitor。

我知道这不完全是你目前的情况,但在我的项目(和很多人的项目)中使用像 AlamoFire 这样的 API 是很常见的,并且有很多创建 GET/PUT/POST/DELETE 请求的有用性,当然还有一个 NetworkReachabilityManager,可用于为 'isConnectedToInternet' 的简单 true/false 结果创建一个方便的全局函数,如下所示:

 /*
 Connectivity
 Struct
 Utilizes AlamoFire to check for network availability.
 isConnectedToInternet should return true in all cases the phone has access (Cellular, No cellular + wifi, Cellular + wifi, wifi)
*/
struct Connectivity {
    static let sharedInstance = NetworkReachabilityManager()!
    static var isConnectedToInternet:Bool {
        let connected = self.sharedInstance.isReachable
        return connected
    }
}//end Connectivity