Swift でネットワーク状況を調べる

この記事は書かれてから1年以上経過しました。Swift の言語仕様や API の変更によって動作しない可能性があります

iOS アプリでネットワークへの接続状況を調べるとき、Objective-C では Tony Million による Reachability というライブラリが使用できた。

一方 Swift では IJReachabilityReachability.swift が使える。ここではネットワーク状況の変化を検出できる Reachability.swift を用いる。

ライブラリを使う準備

Reachability.swift から “Download ZIP” を選び、ライブラリをダウンロードする。

ダウンロードしたファイルを展開し、 Reachability.swift を AMReachability.swift にリネームする。さらに Xcode でこのファイルを開き、 “Edit All in Scope” を使ってクラス名を Reachability から AMReachability へ変更しよう。

こうするのは Tony Million のライブラリを使って App の審査に通らなかったという報告があるためだ。

WARNING there have been reports of apps being rejected when Reachability is used in a framework. The only solution to this so far is to rename the class.

https://github.com/tonymillion/Reachability

ライブラリをプロジェクトに追加する

ライブラリの使い方は簡単、先ほど作った AMReachability.swift をプロジェクトにコピーする。
画面左のファイル一覧に AMReachability.swift をドラッグすると、次のような画面が出るはずなので、“Copy items if needed” にチェックを入れ “Finish” を選ぶ。

Reachability.swift の使い方

使い方はいたって簡単。

単に現在のネットワーク状況を調べるときは次のようにする。

let reachability = AMReachability.reachabilityForInternetConnection()
if reachability.isReachable() {
	println("インターネット接続あり")
} else {
	println("インターネット接続なし")
}

もしインターネット接続ではなく、単にローカルネットワークに接続しているかどうかを調べるときは、代わりに reachabilityForLocalWiFi() を用いる。

ネットワークに接続や切断したときに何か処理をしたいという場合は次のように書ける。

let reachability = AMReachability.reachabilityForInternetConnection()
reachability.whenReachable = { reachability in
	println("インターネット接続あり")
}
reachability.whenUnreachable = { reachability in
	println("インターネット接続なし")
}