Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 网络连接只有在发生更改时才会出现_Ios_Objective C_Swift_Alamofire - Fatal编程技术网

Ios 网络连接只有在发生更改时才会出现

Ios 网络连接只有在发生更改时才会出现,ios,objective-c,swift,alamofire,Ios,Objective C,Swift,Alamofire,我正在使用Alamofire NetworkReachabilityManager管理我的连接,如下所示 let reachabilityManager = NetworkReachabilityManager() reachabilityManager?.listener = { [weak self] status in switch status { case .notReachable: sel

我正在使用Alamofire NetworkReachabilityManager管理我的连接,如下所示

    let reachabilityManager = NetworkReachabilityManager()
   reachabilityManager?.listener = { [weak self] status in
            switch status {
            case .notReachable:
                self?.connectionType = .notReachable
                break
            case .unknown:
                self?.connectionType = .notReachable
                break
            case .reachable(.ethernetOrWiFi):
                self?.connectionType = .wifi
                break
            case .reachable(.wwan):
                self?.connectionType = .cellular

                break
            }

public enum ReachabilityStatus {
    case unknown
    case notReachable
    case wifi
    case cellular
}
我在启动应用程序时收到了这个回调,但我不想要这个回调,我只需要在网络连接发生变化时才需要回调


如何解决这个问题?

如何创建一个变量来存储以前的状态,并在第一次调用时检查该变量是否为nil。之后,您可以随时检查状态是否已更改

let reachabilityManager = NetworkReachabilityManager()
var previousStatus: ReachabilityStatus? = nil

reachabilityManager?.listener = { [weak self] status in

    if let p = self.previousStatus, p == status {
        return // status hasn't changed
    } else {
        // status is nil
        self.previousStatus = status
        return 
    }

    switch status {
    case .notReachable:
        self?.connectionType = .notReachable
        break
    case .unknown:
        self?.connectionType = .notReachable
        break
    case .reachable(.ethernetOrWiFi):
        self?.connectionType = .wifi
        break
    case .reachable(.wwan):
        self?.connectionType = .cellular

        break
}

您可以在延迟后添加侦听器。所以,当NetworkReachabilityManager在应用程序启动时实例化时,侦听器应该为零

    let reachabilityManager = NetworkReachabilityManager()
    var previousStatus: ReachabilityStatus? = nil

    DispatchQueue.main.asyncAfter(deadline: .now() + 10.0, execute: {
    reachabilityManager?.listener = { [weak self] status in

    if let p = self.previousStatus, p == status {
        return // status hasn't changed
    } else {
        // status is nil
        self.previousStatus = status
        return 
    }

    switch status {
    case .notReachable:
        self?.connectionType = .notReachable
        break
    case .unknown:
        self?.connectionType = .notReachable
        break
    case .reachable(.ethernetOrWiFi):
        self?.connectionType = .wifi
        break
    case .reachable(.wwan):
        self?.connectionType = .cellular

        break
 }
})
编辑:我已经测试了这段代码。它起作用了