美文网首页
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