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シェルでこれを試してみてください。list.extend/
- 2. Pythonリクエストモジュールを使用する以外は試してみてください。
- 3. 最終的にはDelphiで試してみてください。
- 4. 文字列を入力するか、またはその内部で試してみてください。
- 5. sdcardでスキャンメディアファイルを試してみてください。
- 6. open file python以外で試してみてください
- 7. 文が正しく実行されていないか試してみてください。
- 8. javascriptを試してみてください
- 9. キャッチパフォーマンスを試してくださいJava
- 10. C#コンボイロックを試してください
- 11. ジャスミンで試してみる
- 12. Outlookエラー:「ダイアログボックスが開いています。それを閉じてから、もう一度試してみてください「
- 13. これをクリックして、それから何かをしてください
- 14. /file.php to/file /試してください
- 15. process.startでmysqldumpを使用すると何も起きませんが、cmdで引数を試してみると、それは動作しています
- 16. matlab:fminuncは 'User objective function returned complexを返します。新しい点を試してみてください... '
- 17. Azure Appサービスモバイル - 試してみると表示されない
- 18. ページの読み込みエフェクト - 新しいページがそれぞれ異なる方向からスクロールします(... scrollToを使用して1つのページサイトとして)
- 19. 周期的なジェネリック医薬品(2を試してみてください)
- 20. スクリプトが既に読み込まれているか確認してください。そうでない場合は、非同期にロードしてください。
- 21. セレンを見つけてそれをクリックしてください
- 22. かみそりでScriptManagerを使用していますか?
- 23. Javascript試してみる/キャッチ
- 24. java:finallyブロックの実行を試みてください
- 25. netsession_mac多くのCPUを使用しています。それは何ですか?
- 26. これらのオプションはそれぞれ何を意味していますか?
- 27. TwitterのAPIからC#を使用して電子メールアドレスを取得したい。それを試したが、いくつかの例外がスローされる
- 28. J2ME - MIDP。私はこのチュートリアルからコピーした実行コードを試してみてくださいサーバー
- 29. 正確にモジュラコーディングとは何ですか、そして私はそれを正しくしていますか?
- 30. MySQL ENUMSはCakePHPでの使用を意図していますか?それとも避けてください。
2番目のコードサンプル( 'let result = try doSomething()// do-catchブロック内にはない')は、 'throws'として宣言されたメソッドの中から呼び出されます。したがって、 'doSomething()'が失敗すると、外側のメソッドも同様に(順番に)行われますか? –
はい、確かです。私はそれに応じて編集します。 – Abdurrahman
ガード・ゴスペル説教のためにアップホードされました –