Swift2.0で、Reachability.swiftのエラーハンドリングの書き方がわからない。

投稿者: Anonymous

お世話になります。

Swift2.0で、

http://d.hatena.ne.jp/scientre/20150527/get_network_status_in_swift

の記事に従って、
Reachability というライブラリを用いてインターネット接続の検出をしたいと思っています。

記事最下部の説明の通り、
「ネットワークに接続や切断したときに何か処理をしたいという場合の書き方」として、

let reachability = AMReachability.reachabilityForInternetConnection()
// エラー(Call can throw, but it is not marked with 'try' and the error is not handled)
        reachability.whenReachable = { reachability in
            print("インターネット接続あり")
        }
        reachability.whenUnreachable = { reachability in
            print("インターネット接続なし")
        }

reachability.startNotifier()
// エラー(Call can throw, but it is not marked with 'try' and the error is not handled)

とすると、

Call can throw, but it is not marked with ‘try’ and the error is not handled

というエラーがでます。

どのようにエラーハンドリングを書けばいいのでしょうか?

よろしくおねがいします。

解決

「reachabilityForInternetConnection」メソッドはコードを見ると「ReachabilityError」というenumをエラーとして投げるので、次の様に、do-try-catchで、「ReachabilityError」を捉えるような、エラー制御を書けば良いと思います。

do {
    let reachability = try AMReachability.reachabilityForInternetConnection()
    if reachability.isReachable() {
        print("インターネット接続あり")
    } else {
        print("インターネット接続なし")
    }
} catch let error as ReachabilityError {
    // エラー処理
} catch let error as NSError {
    // NSErrorが投げられた場合
} catch {
    // その他ハンドル出来なかったもの
}

「reachabilityForInternetConnection」メソッドのように「throws」が宣言された、エラーを投げるメソッドは「try」付きで呼び出す必要があります。「Call can throw, but it is not marked with ‘try’ and the error is not handled」はそのことを意味しています。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *