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

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

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

点击【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 }

原文地址:https://www.cnblogs.com/strengthen/p/10229193.html

时间: 2024-09-30 07:06:45

[Swift通天遁地]四、网络和线程-(12)使用ReachabilitySwift实现对网络状态的检测的相关文章

[Swift通天遁地]四、网络和线程-(13)创建一个Socket客户端

请点击Socket服务端文章:[Swift通天遁地]四.网络和线程-(14)创建一个Socket服务端 本文将演示Socket(套接字)客户端的使用. 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 在Github中下载项目:[SwiftSocket] 在[Source]文件夹,按下[Shift]选择多个文件. [yudpsocket.c] [ytcpsocket.c] [UDPClient.swift] [TCPClient.swift] [Swif

[Swift通天遁地]四、网络和线程-(4)使用Alamofire实现网络请求

本文将演示如何使用第三方库实现网络请求服务. 首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 source 'https://github.com/CocoaPods/Specs.git' 2 platform :ios, '12.0' 3 use_frameworks! 4 5 target ‘DemoApp’ do 6 pod 'Alamofire', '~> 4.0' 7 end 根据配置文件中的相关配置,安装第三方库. 然后点击打开[DemoA

[Swift通天遁地]四、网络和线程-(11)将服务器返回的JSON映射为实例对象

本文将演示使用第三方类库中,将服务器返回的JSON映射为实例对象. 首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 platform :ios, ’12.0’ 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'Alamofire', '~> 4.0' 7 pod 'AlamofireObjectMapper

[Swift通天遁地]四、网络和线程-(15)程序内购功能

本文将演示使用开源类库往项目中添加内购功能.内购功能需要在真机上进行测试. 内购是苹果市场上的一种常见的盈利模式. 首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'SwiftyStoreKit' 7 end 根据配

[Swift通天遁地]九、拔剑吧-(12)创建Preview-Transition图像预览界面

本文将演示如何创建一个漂亮的图像预览界面. 首先确保已经安装了所需的第三方类库.双击查看安装配置文件[Podfile] 1 platform :ios, ‘12.0’ 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod "PreviewTransition" 7 end 根据配置文件中的相关设置,安装第三方类库. 安装完成之后,双击打开项目文件

[Swift通天遁地]三、手势与图表-(12)创建复合图表:包含线性图表和柱形图表

本文将演示如何创建复合图表:包含线性图表和柱形图表. 首先确保在项目中已经安装了所需的第三方库. 点击[Podfile],查看安装配置文件. 1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'Charts' 7 end 根据配置文件中的相关配置,安装第三方库. 然后点击打开[DemoApp.xcwork

[Swift通天遁地]八、媒体与动画-(12)CoreText框架中的字体的FontMetrics布局信息

本文将演示字体的布局信息.文字的布局就是将众多字形,通过一定的规则排列在显示设备上. 文字分布的区域被称为文本区,字形的排列是基于一条不可见的线进行排列的,这条抽象的线称为基线. 在左侧的项目导航区,打开视图控制器的代码文件[ViewController.swift] 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad()

[Swift通天遁地]二、表格表单-(7)电子邮件Mail:实现单元格左右滑动调出功能按钮

本文将演示对单元格进行扩展,当手指在单元格左右滑动时,弹出不同的功能菜单. Github项目:[MGSwipeTableCell] 下载该项目的源代码.文件夹[demo]->文件夹[MailAppDemoSwift]->文件夹[MailAppDemoSwift] ->双击文件[MailAppDemoSwift.xcodeproj]打开示例工程. 选择该项目中的几个文件,拖动到自己的开发项目中.按住[Shift],选择 [MGSwipeButton.h] [MGSwipeButton.m]

[Swift通天遁地]二、表格表单-(10)快速添加日期选择/多选/动作表单/地图等自定义表单

本文将演示创建一个更加强大的表单. Github项目:[Eureka] 下载该项目的源代码. 选择该项目中的几个文件,拖动到自己的开发项目中.按住[Shift],选择 文件夹[Example]->选择 一个自定义的单元格的类文件[CustomCells.swift] 文件夹[Helpers] 文件夹[CustomRows] ->保持默认的设置选项,点击[Finish] 选择资源文件夹[Assets.xcassets],导入项目中需要使用的图片. 在项目导航区,打开视图控制器的代码文件[View