iOS - Reachability.swift 源码分析

1. Reachability.swift 介绍

1.1 Reachability.swift

Reachability.swift 是 Apple 的 Reachability 的替代品,用Swift重写了闭包。

它兼容 iOS(8.0 - 11.0),OSX(10.9 - 10.13)和 tvOS(9.0 - 11.0)

  • 监视目标网络是否可用
  • 监视当前网络的连接方式
  • 监测连接方式的变更

2 Reachability.swift 安装

2.1 手动

将 Reachability.swift 文件夹放入项目即可。

2.2 CocoaPods

(1)确认 CocoaPods 已安装
(2)添加一下代码到工程内的 Podfile 文件中

1
2
use_frameworks!
pod 'ReachabilitySwift'

(3)运行 pod install

2.2 Carthage

(1)通过 Homebrew 安装 Carthage

1
2
$ brew update
$ brew install carthage

(2)添加 github "ashleymills/Reachability.swift" 到你的 Cartfile
(3)运行 carthage update
(4)将 Reachability.frameworkCarthage/Build/iOS/ 目录拖到 Xcode 项目的 General 设置的 Linked Frameworks and Libraries 中。
(5)将 $(SRCROOT)/Carthage/Build/iOS/Reachability.framework 添加到 Carthage 的运行脚本阶段的输入文件中。
(6)在您的代码中导入 Reachability,如下所示:import Reachability

2. 使用

2.1 closures 的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//初始化
let reachability = Reachability()!

reachability.whenReachable = { reachability in
if reachability.connection == .wifi {
print("Reachable via WiFi")
} else {
print("Reachable via Cellular")
}
}
reachability.whenUnreachable = { _ in
print("Not reachable")
}

do {
try reachability.startNotifier()
} catch {
print("Unable to start notifier")
}

停止通知:

1
reachability.stopNotifier()

2.2 notifications 的使用

所有通知都在主线程中发送。

1
2
3
4
5
6
7
8
9
10
11
//初始化
let reachability = Reachability()!

//需要在 viewWillAppear 声明这个

NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(note:)), name: .reachabilityChanged, object: reachability)
do{
try reachability.startNotifier()
}catch{
print("could not start reachability notifier")
}

也可以这样使用

1
2
3
4
5
6
7
8
9
10
11
12
13
@objc func reachabilityChanged(note: Notification) {

let reachability = note.object as! Reachability

switch reachability.connection {
case .wifi:
print("Reachable via WiFi")
case .cellular:
print("Reachable via Cellular")
case .none:
print("Network not reachable")
}
}

停止通知:

1
2
reachability.stopNotifier()
NotificationCenter.default.removeObserver(self, name: .reachabilityChanged, object: reachability)

2.3 使用示例

(1)使用前记得导入ReachabilitySwift类,下面代码放在viewDidLoad()方法中即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var reachability: Reachability!

do {
reachability = try Reachability.reachabilityForInternetConnection()
} catch {
print("Unable to create Reachability")
return
}

// 检测网络连接状态
if reachability.isReachable() {
print("网络连接:可用")
} else {
print("网络连接:不可用")
}

// 检测网络类型
if reachability.isReachableViaWiFi() {
print("网络类型:Wifi")
} else if reachability.isReachableViaWWAN() {
print("网络类型:移动网络")
} else {
print("网络类型:无网络连接")
}

(2)监听网络变化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 网络可用或切换网络类型时执行
reachability.whenReachable = { reachability in

// 判断网络状态及类型
}

// 网络不可用时执行
reachability.whenUnreachable = { reachability in

// 判断网络状态及类型
}

do {
// 开始监听
try reachability.startNotifier()
} catch {
print("Unable to start notifier")
}

停止监听调用 reachability.stopNotifier() 即可。

------本文结束 感谢阅读------

本文地址:http://kaaaaai.cn/articles/reachability-swift-analysis.html
本文基于 知识共享署名-相同方式共享 4.0 国际许可协议发布
转载请注明出处,谢谢!

众筹项目:拯救世界!
0%