はじめに
端末が「ネットに接続されているとき」はスタンプを送信して〜や「ネットに接続されていないとき」はアラートを表示して〜みたいなことをしたいときが来る(はず)。そんなとき、NWPathMonitorを使用すればライブラリを使わずネットの接続状況を取得できる。
結論
NWPathMonitorとは、ネットワークの変更を監視して対応するためのオブザーバーである。
また、func start(queue: DispatchQueue)
を使用することでパスの変更を監視することが可能。
詳細
- ネットワーク状況を監視するための
NWPathMonitor()
とパス配信するイベントキューDispatchQueue.global(qos: .background)
を宣言する。 - パスモニターを開始し、ネットワークパスの更新を監視できるようにする。
- ネットワークパスが更新されたら行いたい処理を記述する。
Swift
import Network
class NetworkStatus {
//ネットワーク状況を監視するための `NWPathMonitor()
private let monitor = NWPathMonitor()
//パス配信するイベントキュー
private let queue = DispatchQueue.global(qos: .background)
func setUp() {
//パスモニターの開始
monitor.start(queue: queue)
//ネットワークパスが更新されたら行いたい処理を記述
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
DispatchQueue.main.async {
print("接続中")
//何かしたい処理
}
} else {
DispatchQueue.main.async {
print("接続解除")
//何かしたい処理
}
}
}
}
}
おわりに
ネット接続の有無の取得だが、DispatchQueue.main.async
を使用することで何か描画や表示をする際、遅れて処理がなされてしまうみたいなことも防ぐことができる。スレッド関係諸々については後日まとめることとする。
参考記事
【SwiftUI】NWPathMonitorを使用して、ネットワーク通信状態を確認する
【Swift】NWPathMonitorを使ったネットワーク監視方法について
開発環境
- Xcode-13.4.1
- iOS13以降