try〜catchのcatch内でエラーの内容に応じて処理を分けたい場合

投稿者: Anonymous

タイトルの通りなのですが、
独自で作成したメソッドではなく元からあるメソッド(ex. contentsOfFile)を使った場合にエラーの内容で条件を分岐できる方法を探しています。

以下が今のコードなのですが、この状態ではどんなエラーが発生した場合にもファイルを保持していない場合の処理に流れてしまいます。

var temp = ""

var documentDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last
documentDir = documentDir?.stringByAppendingPathComponent("data")
documentDir = documentDir?.stringByAppendingPathComponent("table")

if let uwDocumentDir = documentDir {

    do {
        temp = try String(contentsOfFile: uwDocumentDir.stringByAppendingPathComponent("hoge.txt"),
                          encoding: NSUTF8StringEncoding)
    } catch let error as NSError {
        print("【エラーが発生しました : (error)】")
    }

    if temp.isEmpty {
        // ファイルを保持していない場合の処理
    }

enumでどこかに記述してあるものなのでしょうか?

解決

将来的にはErrorTypeを拡張したEnumでエラーの種類ごとに処理を分岐することができるようになると思いますが、現状はNSErrorが帰ってくるので、NSErrorcodeプロパティを使って分岐することになります。
ちなみに、返す恐れのあるエラーの一覧などが書かれているものはないと思います。

大ざっぱな例は下記になります。参考にしてください。

do {
    temp = try String(contentsOfFile: uwDocumentDir.stringByAppendingPathComponent("hoge.txt"),
                            encoding: NSUTF8StringEncoding)NSUTF8StringEncoding)
} catch let error as NSError {
    switch error.code {
    case NSFileReadNoSuchFileError:
        ...
    case NSFileReadInapplicableStringEncodingError:
        ...
    case ...:
        ...
    default:
        ...
    }

}
回答者: Anonymous

Leave a Reply

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