使用Alamofire持续检查Internet连接

时间:2019-03-15 15:53:41

标签: swift alamofire internet-connection

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

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

}

然后在每种方法中添加以下代码行以检查Internet连接

if !Connectivity.isConnectedToInternet() {

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

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

2 个答案:

答案 0 :(得分:0)

请勿执行此操作!苹果多年来一直表示,您永远不应将可达性检查作为发出请求的先决条件。相反,您应该发出请求并处理失败,使用可访问性在检测到连接重新建立后可能重试该请求。可到达性并不是100%可靠的,现在NWPathMonitor类也已弃用。

答案 1 :(得分:0)

正如乔恩·希尔(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”。相反,如果下载成功,则您取消标签。