美文网首页
Swift中使用Reachability进行网络监测的两种方法

Swift中使用Reachability进行网络监测的两种方法

作者: 野比大雄001 | 来源:发表于2017-05-24 10:42 被阅读174次

1、使用闭包:

funccheckNetworkForClosures() {

//监听网络变化

//网络可用或切换网络类型时执行

self.reachability.whenReachable = { reachabilityin

DispatchQueue.main.async {

print("可以监测网络")

//检测网络连接状态

ifself.reachability.isReachable {

print("网络连接:可用")

//检测网络类型

ifself.reachability.isReachableViaWiFi {

print("网络类型:Wifi")

}elseifself.reachability.isReachableViaWWAN{

print("网络类型:移动网络")

}else{

print("网络类型:无网络连接")

}

}else{

print("网络连接:不可用")

self.showNetworkAlert()

}

}

}

//网络不可用时执行

self.reachability.whenUnreachable = {

reachabilityin

DispatchQueue.main.async {

print("不能监测网络")

}

}

do{

//开始监听网络

tryself.reachability.startNotifier()

}catch{

print("开始监听网络失败")

}

}

2、使用通知:

funccheckNetworkForNotifications() {

// 1、设置网络状态消息监听2、获得网络Reachability对象

NotificationCenter.default.addObserver(self, selector:#selector(monitorReachabilityChanged(_:)), name: ReachabilityChangedNotification, object:self.reachability)

do{

// 3、开启网络状态消息监听

tryself.reachability.startNotifier()

}catch{

print("开始监听网络失败")

}

}

funcmonitorReachabilityChanged(_noti:NSNotification) {

letreachability = noti.objectas!Reachability

//检测网络连接状态

ifreachability.isReachable {

print("网络连接:可用")

//检测网络类型

ifreachability.isReachableViaWiFi {

print("网络类型:Wifi")

}elseifreachability.isReachableViaWWAN {

print("网络类型:移动网络")

}else{

print("网络类型:无网络连接")

}

}else{

print("网络连接:不可用")

DispatchQueue.main.async{//不加这句导致界面还没初始化完成就打开警告框,这样不行

//警告框,提示没有网络

self.showNetworkAlert()

}

}

}

//警告框,提示没有连接网络

funcshowNetworkAlert() {

letalert =UIAlertController.init(title:"系统提示", message:"请打开网络连接", preferredStyle: .alert)

letcancelAction =UIAlertAction.init(title:"确定", style: .default, handler:nil)

alert.addAction(cancelAction)

self.present(alert, animated:true, completion:nil)

}

相关文章

网友评论

      本文标题:Swift中使用Reachability进行网络监测的两种方法

      本文链接:https://www.haomeiwen.com/subject/ygbnxxtx.html