尝试使用 Alamofire 检查 iOS 设备上的互联网连接

Posted

技术标签:

【中文标题】尝试使用 Alamofire 检查 iOS 设备上的互联网连接【英文标题】:Attempt to check internet connection on iOS device with Alamofire 【发布时间】:2018-04-09 12:08:02 【问题描述】:

我使用以下代码检查互联网连接:

class Reachability 

    let networkReachabilityManager = Alamofire.NetworkReachabilityManager(host: "www.google.com")

    func checkForReachability() 
        self.networkReachabilityManager?.listener =  status in
            print("Network Status: \(status)")
            switch status 
            case .notReachable:
                print("no internet connection detected")
            //Show error here (no internet connection)
            case .reachable(_), .unknown:
                print("internet connection availible")
            
        
        self.networkReachabilityManager?.startListening()
    

连接存在时,成功调用.reachable中的block。但是在没有连接的情况下没有调用,为什么?

我这样称呼它(保持对类的引用,所以它不会被释放)

class AppDelegate: UIResponder, UIApplicationDelegate 
    var window: UIWindow?
    let reachabilityManager = Reachability()

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
        window = UIWindow(frame: UIScreen.main.bounds)
        reachabilityManager.checkForReachability()
        return true
    

【问题讨论】:

会有其他状态案例也使用它们并在您的情况下调试它的去向。 【参考方案1】:

创建用于检查连通性的公共类

import Foundation
import Alamofire

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

在你需要的地方调用函数

if !Connectivity.isConnectedToInternet() 
    // show Alert
    return

【讨论】:

有时设备连接到Wifi/Mobile data,但互联网无法正常工作。那么如何检查呢?? @EvgeniyKleban - 不需要这个,alamofire 使用isReachable 的键自动接收值 @Anbu.karthik 然后请删除不必要的代码 :) @dahiya_boy - 这是 alamofire 的方法之一,alomifre 会自动处理这种情况。 数据已连接,但互联网无法正常工作。如何检查?【参考方案2】:

创建一个名为 Connectivity 的快速类。您可以使用Alamofire 中的NetworkReachabilityManager 类,并根据需要配置isConnectedToInternet() 方法。我只检查设备是否连接到互联网。

import Foundation
import Alamofire
class Connectivity 
    class func isConnectedToInternet() ->Bool 
        return NetworkReachabilityManager()!.isReachable
    

用法-

if Connectivity.isConnectedToInternet() 
        print("Yes! internet is available.")
        // do some tasks..
 

或者你可以简单地这样做 -

  if let err = error as? URLError, err.code  == URLError.Code.notConnectedToInternet
    // No internet connection
    else
    // your other errors
    

【讨论】:

以上是关于尝试使用 Alamofire 检查 iOS 设备上的互联网连接的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 使用 alamofire 发布请求

在 iOS 9 问题上使用 Alamofire 上传带有 URL 参数的图像

使用 JustHTTP 和 Alamofire 发送两次 HTTP 帖子

Alamofire 3.0 - iOS 9.1 上的 EXC_BAD_ACCESS

Alamofire 未经评估并发送客户端证书

在 chrome 上检查 IOS 设备