2017-01-19 14 views
2

戻り値のない投げ関数の呼び出しにtry?(オプションのtry)を使用すると、エラーは無視されますか?オプションで戻り値のない関数を試してください

func throwingVoidFunction() throws { . . . } 

try? throwingVoidFunction() 

私は、コンパイラは、戻り値の型voidで投げる機能の前でtry?を許可しないことを期待、コンパイラは文句はありません。

したがって、エラーを吸収する方法として、void関数の前にtry?を使用していますか? (空のデフォルトキャッチを使用する場合のように:catch {}

答えて

2

コンパイラが不平を言う理由はありません。戻り型

func throwingVoidFunction() throws { ... } 

のは Voidであり、したがって式

try? throwingVoidFunction() 

のタイプはOptional<Void>であり、そして式を評価中にエラーがスローされた場合、その値は、(== Optional<Void>.nonenilありますそれ以外の場合はOptional<Void>.some()です。

戻り値を無視するか、nilに対してテストすることができます。 例はAn elegant way to ignore any errors thrown by a methodに与えられている:

let fileURL = URL(fileURLWithPath: "/path/to/file") 
let fm = FileManager.default 
try? fm.removeItem(at: fileURL) 
+0

悪い、それは単にスローエラーを無視するように悪いのスタイルではないでしょうか? – user1364368

+0

@ user1364368:あなたは大体正しいです。この特定のケースでは、最も可能性の高いエラーは、ファイルが存在しないことであり、そのことに気にしないかもしれません。とにかく、それはあなたが尋ねたことの一例に過ぎません。 –

+0

エラーを無視するという漫画もあります:http://www.commitstrip.com/en/2015/07/30/coders-weaknesses-1-the-trycatch/ – user1364368

関連する問題