[Swift通天遁地]四、网络和线程,12使用ReachabilitySwift实现对网络状态的检测

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

➤微信公众号:山青咏芝(shanqingyongzhi)

➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/

➤GitHub地址:https://github.com/strengthen/LeetCode

➤原文地址:

➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。

➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

目录:[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 }