[Swift通天遁地]4、網絡和線程-(12)使用ReachabilitySwift實現對網絡狀態的檢測

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-abesbueq-kx.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

目錄:[Swift]通天遁地Swiftios

本文將演示另一種檢測網絡狀態的方法。git

首先確保在項目中已經安裝了所需的第三方庫。github

點擊【Podfile】,查看安裝配置文件。swift

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 }
相關文章
相關標籤/搜索