使用 Alamofire 持续检查互联网连接

Checking for Internet Connection continually with Alamofire

我的应用程序基于 TableView,它使用 Alamofire 从服务器下载一些数据。因此,因为必须有互联网连接才能使用我的应用程序,所以我想不断检查它。我找到了创建此 class 的解决方案:

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

}

我在每个方法中都添加了这些代码行来检查互联网连接

if !Connectivity.isConnectedToInternet() {

        print("No internet connection")
        } else {
            print("connected")
        }

它有效,但我认为这不是持续检查连接的正确方法。我认为我必须使用 appDelegate 中的 notificationCenter 实现一些观察者,但我不知道该怎么做...

不要这样做! Apple 多年来一直表示,您永远不应该使用可达性检查作为发出请求的先决条件。相反,您应该发出请求并处理失败,使用可达性在检测到连接已重新建立时可能重试请求。可达性并非 100% 可靠,现在也已被 NWPathMonitor class.

弃用

正如 Jon Shier 和 Matt 所说,您不应该这样做。事实上,如果您使用 Alamofire 下载图像,我建议您改用 AlamofireImage 并使用此代码:

let url = URL(string: yourUrl)!

        cell.yourImage.af_setImage(
            withURL: url,
            placeholderImage: placeholderImage,
            imageTransition: .crossDissolve(0.2),
            runImageTransitionIfCached: false,
            completion: { response in
                if response.result.isSuccess {
                    self.dismissLabel()
                } else if response.error?._code == NSURLErrorNotConnectedToInternet{
                    self.showLabel()
                }
        })

所以基本上,当 AlamofireImage 在下载图像时检索到连接错误时,您可以显示标签 "No internet Connection"。相反,如果它成功下载它,您将关闭该标签。