data = try! Data(contensOf: hogeURL)
のようにtry!になるのが怖いというのがあります。ただData?だと取り出す時にやや面倒だなと思いました。ただ安全側に倒すならData?にしたほうが安全ではありそうですかね。 do { let data = try Data(contensOf: hogeURL) // data を使う処理 } catch { // エラーハンドリング }
catch
の中では error
にアクセスすることで、エラー情報を取得することができます。 try?
にしてしまうとエラー情報が失われてしまい、原因を特定したり、原因によってエラーハンドリングの仕方(アラートを表示する、リトライする、無視してログ出力するなど)を変更することもできなくなってしまいます。 (edited)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)