使用 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"。相反,如果它成功下载它,您将关闭该标签。
我的应用程序基于 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"。相反,如果它成功下载它,您将关闭该标签。