Swift 2.0に、Appleはエラー(do-try-catch)を処理する新しい方法を導入しました。 数日前のBeta 6ではさらに新しいキーワード(try?
)が導入されました。 また、try!
を使用できることも知っていました。 3つのキーワードの違いは何ですか?それぞれのキーワードはいつ使用されますか?試してみてください!試してみる?違いは何ですか?そして、それぞれをいつ使用するのですか?
91
A
答えて
187
は、以下の投げの関数を想定します。
enum ThrowableError : ErrorType { case BadError }
func doSomething() throws -> String {
if everythingIsFine {
return "Everything is ok"
} else {
throw ThrowableError.BadError
}
}
あなたがスローされることがあり関数を呼び出してしようとするが、2つのオプションを持っている
を試してみてください。
あなたがdo-catchブロック内の通話囲んでエラー処理の責任を取ることができます。
do {
let result = try doSomething()
}
catch {
// Here you know about the error
// Feel free to handle to re-throw
}
それとも、関数を呼び出してみてくださいを、そしての次の呼び出し側にに沿って、エラーを渡しますコールチェーン:
func doSomeOtherThing() throws -> Void {
// Not within a do-catch block.
// Any errors will be re-thrown to callers.
let result = try doSomething()
}
try!
暗黙のうちにアンラップされたオプションに、その中にnilを付けてアクセスしようとするとどうなりますか?はい、本当に、アプリはクラッシュします! 試しにも同じです!それは基本的にエラーチェーンを無視し、 "doかdie"の状況を宣言します。呼び出された関数がエラーをスローしなかった場合は、すべて正常に機能します。しかし、それが失敗してエラーを投げた場合、アプリケーションは単にをクラッシュさせます。
let result = try! doSomething() // if an error was thrown, CRASH!
try?
Xcode 7ベータ6で導入された新しいキーワードです。は、成功した値をアンラップし、nilを返してエラーをキャッチするオプションのを返します。
if let result = try? doSomething() {
// doSomething succeeded, and result is unwrapped.
} else {
// Ouch, doSomething() threw an error.
}
それとも新たな素晴らしいガードキーワードを使用することができます:あなたはそれがnilに翻訳されていますように、起こったエラーを破棄しているtry?
ノートを使用することによって、ここに
guard let result = try? doSomething() else {
// Ouch, doSomething() threw an error.
}
// doSomething succeeded, and result is unwrapped.
最後の注意を。 tryを使用しますか?あなたが成功と失敗にもっと集中しているとき、なぜ失敗したのかではありません。
関連する問題
- 1. python試し利回りを試してみてください
- 2. Pythonシェルでこれを試してみてください。list.extend/
- 3. 新しいAzureモバイルアプリテンプレートから「試してみてください」
- 4. Textscan - エラーをキャッチして何かを試してみてください
- 5. $ idなしでlaravelを試してみてください
- 6. 文字列を入力するか、またはその内部で試してみてください。
- 7. Pythonリクエストモジュールを使用する以外は試してみてください。
- 8. 最終的にはDelphiで試してみてください。
- 9. 辞書オブジェクトからクエリを試してみてください
- 10. 既にメールが取られています(試してみてください)
- 11. sdcardでスキャンメディアファイルを試してみてください。
- 12. open file python以外で試してみてください
- 13. は私AppServiceProvider.phpでこれを試してみてください .. laravel 5
- 14. 文が正しく実行されていないか試してみてください。
- 15. SwatchのCatchを試してみてください
- 16. laravelで作業しないで試してみてください5.4
- 17. Python:実際に試してみる前に擬似的に試してみてください
- 18. Pythonで動作しない点を除き、試してみてください
- 19. スクラップ中にrを試してみてください
- 20. javascriptを試してみてください
- 21. リソースを試してみてください
- 22. ベストプラクティス:JavaScriptで2つのことを試してみてください。
- 23. 私は、私はこれを試してみましたが、その生成していない何も
- 24. もう一度試してみてください
- 25. SqlException vb.netと試してみてください
- 26. 試してみてください...非同期でキャッチエラーをキャッチしないでください
- 27. getJSON関数を使用してみてください、それはこれが私のgetJSONで何
- 28. かみそりモデルで隠し入力してください
- 29. 私はMySQLでこれらのコードを試してみてください二つの異なる列laravel
- 30. 試してみてください同じものを除いて
2番目のコードサンプル( 'let result = try doSomething()// do-catchブロック内にはない')は、 'throws'として宣言されたメソッドの中から呼び出されます。したがって、 'doSomething()'が失敗すると、外側のメソッドも同様に(順番に)行われますか? –
はい、確かです。私はそれに応じて編集します。 – Abdurrahman
ガード・ゴスペル説教のためにアップホードされました –