Ios 网络连接只有在发生更改时才会出现
我正在使用Alamofire NetworkReachabilityManager管理我的连接,如下所示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
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
}
})
编辑:我已经测试了这段代码。它起作用了