2017-06-24 3 views
0

私はもっと柔軟にプロトタイプをリファクタリングしています、その段階にいますよ。つまり、エラー処理を追加したいのです。私のアプリケーションは、ファイルを扱うアクションと同様にエラーが起こりやすいString(contentsOf:url)にかなり依存しています。しかし、問題のinitメソッドのシグネチャは単に読み:String(contentsOf url:URL)はどんな種類の例外をスローしますか?

init(contentsOf url: URL) throws 

だから私はそれがスロー知っている...しかし、それは、具体的に何を投げるのか?どのようなエラーが発生するのかわからないときにエラーを処理する方法を理解しているかどうかはわかりません。 documentationは何も言わない。私は困惑していますか?

+0

このイニシャライザは使用しないでください。 URLSessionを使用してデータをロードします。 – rmaddy

+0

ネットワークデータをダウンロードするためのURLセッションはありませんか?私はちょうどローカルファイルをロードしています。 – PopKernel

+0

OK、ローカルファイルの場合は問題ありません。 – rmaddy

答えて

0

init(contentsOf:)は、FoundationのNSString APIから来ます。つまり、すべてのFoundation APIと同様に、エラーを説明するNSErrorがスローされます。あなたは、他のエラーのようにそれをキャッチすることができます

do { 
    let str = String(contentsOf: theLocalURL) 
    // ... 
} catch { 
    // Present `error.localizedDescription` to the user to let them know what went wrong 
} 

エラーがNSErrorあるので、あなたはまた、そのcode/userInfoを検査するようにそれをキャッチすることができます:

do { 
    // Same as above 
} catch let error as NSError { 
    // Inspect what went wrong. 
} 

どの特定のコードあなたのためのようNSError Codes listに... NSFile始まるエラーコードを見て、期待するかもしれません。ファイルが存在しない場合の一般的なコードは、とりわけ、NSFileReadNoPermissionErrorまたはNSFileReadNoSuchFileErrorかもしれません。

一般に、エラーのlocalizedDescriptionをユーザーに表示して操作を中止するか、再試行する必要があります。

関連する問題