★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10229193.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
本文将演示另外一种检测网络状态的方法。
首先确保在项目中已经安装了所需的第三方库。
点击【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 }