Reachability.swiftというライブラリで現在の通信状況を調べてみました。
Reachability.swiftのインストール
インストールはCocoaPodsで行いました。
target 'MyApp' do use_frameworks! pod 'ReachabilitySwift' end
通信状況を確認する
Wifi/キャリア通信/電波なし は下のように確認できます。
import UIKit import Reachability class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() if let reachability = Reachability() { print(reachability.connection == .wifi) print(reachability.connection == .cellular) print(reachability.connection == .none) } } }
通信可能になった時に通知する
whenReachableを使えば、通信可能になったタイミングを知ることができます。
let reachability = Reachability() reachability?.whenReachable = { reachability in print(reachability.connection) } try? reachability?.startNotifier()
逆に通信できなくなったタイミングを知りたい時はwhenUnreachableを使います。
let reachability = Reachability() reachability?.whenUnreachable = { reachability in print(reachability.connection) } try? reachability?.startNotifier()
この時、Reachabilityはインスタンス変数にするなどして開放されないよう気をつける必要があります。
import UIKit import Reachability class ViewController: UIViewController { let reachability = Reachability() override func viewDidLoad() { super.viewDidLoad() reachability?.whenReachable = { reachability in } try? reachability?.startNotifier() } }
通信状況が変わった時の通知は、NotificationCenterで検知する事もできます。
import UIKit import Reachability class ViewController: UIViewController { let reachability = Reachability() override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(self.reachabilityChanged), name: .reachabilityChanged, object: reachability) try? reachability?.startNotifier() } @objc func reachabilityChanged() { print(Reachability()?.connection) } }