zoukankan      html  css  js  c++  java
  • [Swift通天遁地]四、网络和线程-(12)使用ReachabilitySwift实现对网络状态的检测

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10229193.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    目录:[Swift]通天遁地Swift

    本文将演示另外一种检测网络状态的方法。

    首先确保在项目中已经安装了所需的第三方库。

    点击【Podfile】,查看安装配置文件。

    1 platform :ios, '12.0'
    2 use_frameworks!
    3 
    4 target 'DemoApp' do
    5     source 'https://github.com/CocoaPods/Specs.git'
    6     pod 'ReachabilitySwift'
    7 end

    根据配置文件中的相关配置,安装第三方库。

    然后点击打开【DemoApp.xcworkspace】项目文件。

    在项目导航区,打开视图控制器的代码文件【ViewController.swift】

      1 import UIKit
      2 //在当前的类文件中,引入已经安装的第三方类库
      3 import ReachabilitySwift
      4 
      5 class ViewController: UIViewController {
      6 
      7     override func viewDidLoad() {
      8         super.viewDidLoad()
      9         // Do any additional setup after loading the view, typically from a nib.
     10         //通过闭包的方式检测网络的连接状态
     11         exampleClosures()
     12 
     13         //通过通知的方式,进行网络状态的检测
     14         exampleNotifications()
     15     }
     16     
     17     //添加一个方法,通过闭包的方式检测网络的连接状态
     18     func exampleClosures()
     19     {
     20         //初始化一个网络可访问性检测对象
     21         let reachability = Reachability()!
     22         
     23         //调用状态检测方式,并在闭包语句中,
     24         //处理对网络连接状态检测成功的结果。
     25         reachability.whenReachable = {
     26             reachability in
     27             //返回主线程,根据检测的状态,执行不同的动作
     28             DispatchQueue.main.async
     29             {
     30                 //判断是否通过无线局域网可以访问网络
     31                 if reachability.isReachableViaWiFi
     32                 {
     33                     //输出通过无线局域网可以访问网络
     34                     print("---Reachable via WiFi")
     35                 }
     36                 else
     37                 {
     38                     //网络是通过蜂窝方式访问
     39                     print("---Reachable via Cellular")
     40                 }
     41                 //调用停止检测的方法,停止对网络状态的检测
     42                 reachability.stopNotifier()
     43             }
     44         }
     45         //处理网络连接不成功的情况
     46         reachability.whenUnreachable =
     47         {
     48             reachability in
     49             //返回主线程,根据检测的状态,执行不同的动作
     50             DispatchQueue.main.async
     51             {
     52                 //当网络连接不成功时,
     53                 //输出失败的日志信息
     54                 print("---Not reachable")
     55                 //调用停止检测的方法,停止对网络状态的检测
     56                 reachability.stopNotifier()
     57             }
     58         }
     59         
     60         //添加一个异常捕捉语句
     61         do
     62         {
     63             //开始对网络状态的检测
     64             try reachability.startNotifier()
     65         }
     66         catch
     67         {
     68             print("---Unable to start notifier")
     69         }
     70     }
     71     
     72     //添加一个方法,通过通知的方式,进行网络状态的检测
     73     func exampleNotifications()
     74     {
     75         //初始化一个网络可访问性检测对象
     76         let reachability = Reachability()!
     77         
     78         //通过通知中心,添加一个观察者
     79         NotificationCenter.default.addObserver(self, 
     80                                                selector: #selector(self.reachabilityChanged),
     81                                                name: ReachabilityChangedNotification,
     82                                                object: reachability)
     83         
     84         //添加一个异常捕捉语句
     85         do
     86         {
     87             //开始对网络状态的检测
     88             try reachability.startNotifier()
     89         }
     90         catch
     91         {
     92             print("---could not start reachability notifier")
     93         }
     94     }
     95 
     96     //添加一个方法,用来响应通知事件
     97     func reachabilityChanged(note: NSNotification)
     98     {
     99         //当有通知返回时,获得通知的结果
    100         let reachability = note.object as! Reachability
    101         
    102         //根据网络连接状态,作出相应的处理
    103         if reachability.isReachable
    104         {
    105             //判断是否通过无线局域网可以访问网络
    106             if reachability.isReachableViaWiFi
    107             {
    108                 //输出通过无线局域网可以访问网络
    109                 print("---Reachable via WiFi")
    110             }
    111             else
    112             {
    113                 //网络是通过蜂窝方式访问
    114                 print("---Reachable via Cellular")
    115             }
    116         }
    117         else
    118         {
    119             //当网络无法连接时,在控制台输出相应日志
    120             print("---Network not reachable")
    121         }
    122         //调用停止检测的方法,停止对网络状态的检测
    123         reachability.stopNotifier()
    124 
    125         NotificationCenter.default.removeObserver(self,
    126                                    name: ReachabilityChangedNotification,
    127                                    object: reachability)
    128     }
    129     
    130     override func didReceiveMemoryWarning() {
    131         super.didReceiveMemoryWarning()
    132         // Dispose of any resources that can be recreated.
    133     }
    134 }
  • 相关阅读:
    MVC————前台中,冒号与等号的区别
    MVC-通过对象获取整个表单内容
    对Webservice的理解
    windows上使用logstash-input-jdbc
    elasticsearch-head的安装和使用
    最简单的php学习
    linq to sql 和linq to php 的区别
    thinkphp中JS文件不能写__ROOT__变量
    用curl获取https请求时出现错误的处理
    优化apk的odex处理
  • 原文地址:https://www.cnblogs.com/strengthen/p/10229193.html
Copyright © 2011-2022 走看看