【问题标题】:Checking for Internet Connection continually with Alamofire使用 Alamofire 不断检查 Internet 连接
【发布时间】:2019-08-06 18:06:23
【问题描述】:

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

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

}

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

if !Connectivity.isConnectedToInternet() {

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

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

【问题讨论】:

  • 实际上您应该从不检查连接性/可达性。继续前进并建立网络。如果 Internet 不存在/消失,连接将按正常顺序失败,然后您可以处理它。
  • 什么意思?我需要像 instagram 一样显示“无互联网连接”标签,所以我需要检查连接性...
  • 一旦失败错误告诉你没有连接,你就会这样做。不需要专门检查。
  • 所以你是说我必须检查使用 Alamofire 的请求是失败还是成功?之后我必须根据情况显示标签?
  • 是的,但您不必“检查”:如果您设置正确,您已经设置为每次尝试与 alamofire 对话时都会收到失败错误。跨度>

标签: swift alamofire internet-connection


【解决方案1】:

正如 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 在下载图像时检索到连接错误时,您可以显示标签“无互联网连接”。相反,如果它成功下载它,您将关闭标签。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2020-11-07
      相关资源
      最近更新 更多