Avatar
Avatar
udo223
ありがとうございます! 必ず何か書き込むのでDataにしたいですが、data = try! Data(contensOf: hogeURL) のようにtry!になるのが怖いというのがあります。ただData?だと取り出す時にやや面倒だなと思いました。ただ安全側に倒すならData?にしたほうが安全ではありそうですかね。
エラーハンドリングしたいということであれば、↓のようにするのがいいかもしれません。 do { let data = try Data(contensOf: hogeURL) // data を使う処理 } catch { // エラーハンドリング } catch の中では error にアクセスすることで、エラー情報を取得することができます。 try? にしてしまうとエラー情報が失われてしまい、原因を特定したり、原因によってエラーハンドリングの仕方(アラートを表示する、リトライする、無視してログ出力するなど)を変更することもできなくなってしまいます。 (edited)
t_kansha 1
3:18 AM
また、 Swift ではエラーの意味で nil が返されるメソッド等が存在はしますが(たとえば String(data: data, using: .utf8) など)、エラーの意味で返された nil をそのまま保持し続けるのも望ましくありません。 エラーが throw されるのではなく nil が返されるケースは、原則としてエラーの原因が自明な場合です( String(data: data, using: .utf8) なら、 UTF-8 として解釈できないバイト列が渡された場合)。その場でエラーハンドリングすれば原因がわかりますが、持ち続けてしまうとどこから nil が混入したのかわからなくなり、原因を究明するのが困難になります。エラーとして nil が返される場合には、↓のように即座にエラーハンドリングするのが望ましいです。 guard let string = String(data: data, using: .utf8) else { // エラーハンドリング( data が UTF-8 として解釈できない場合) } // string を使う処理 (edited)
t_naruhodo 1