25158


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

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

[code]

    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 {
            // ファイルを保持していない場合の処理
        }
    
[/code]

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


CC BY-SA 3.0
2016-05-24T04:13:22.487
25129
2016-05-25T06:41:22.470
2016-05-25T06:41:22.470
5519
14782
question
swift xcode swift2
try〜catchのcatch内でエラーの内容に応じて処理を分けたい場合


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

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

[code]

    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:
            ...
        }
    
    }
    
[/code]


CC BY-SA 3.0
2016-05-25T06:39:53.467
25158
2016-05-25T06:39:53.467
5519
25129
answer