しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Reachability.swiftで通信状況を確認する

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)
    }
}