前言
在开发App中我们常常需要监控设备的网络状态,然后根据变化给出用户提示或者作出相应的处理以提升用户的使用体验。苹果官方提供了一个 Reachability 用户监控网络状态的变化,不过使用起来较麻烦,AFNetwork && Alamofire 其实已经给我们提供了这个功能。
使用AFNetwork:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
// 当网络状态改变时调用
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"未知网络");
break;
case AFNetworkReachabilityStatusNotReachable:
{
NSLog(@"网络不可用");
}
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"手机自带网络");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WIFI");
break;
}
}];
//开始监控
[manager startMonitoring];
return YES;
}
使用Alamofire:
var manager: NetworkReachabilityManager?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//监控网络
manager = NetworkReachabilityManager(host: "www.apple.com")
manager?.listener={ status in
switch status
{
case .notReachable:
print("网络不可用")
break
case .unknown:
print("未知网络")
break
case .reachable(.ethernetOrWiFi):
print("WIFI网络")
break
case .reachable(.wwan):
print("4G网络")
break
}
}
manager?.startListening()
return true
}
注意:
使用AFNetwork没有什么问题,但在使用Alamofire的时候要注意manager对象是否被销毁,因为销毁对象的时候会调用stopListening方法,停止监控,这之后即使网络状态改变,也不会进回调方法。
deinit
{
stopListening()
}