質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

3485閲覧

Swiftの例外処理について

turkey1212

総合スコア12

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/05/30 16:32

Swift初心者です。ご教授下さい。
Swiftで用意されているエラーハンドリングは、呼び出し先のメソッドで明示的にエラーを投げた時に
呼び出し元でキャッチするもののようですが、java等のtry~catchのように、何か想定外の問題が
発生した場合にそれをキャッチする、ということは出来ないのでしょうか?
想定していなかった問題、例えばヌルポインタアクセスなどが発生した際に、アプリをクラッシュさせずに
アプリの起動シーケンスに戻すことを考えています。
クラッシュ解析ツールを導入した際にログ出力することを見越して、クラッシュ発生個所を細かく
try~catchで囲むことが出来れば理想的なのですが。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

少し探してみましたが、どうもお望みの動作の実現は難しそうです。Swiftの場合、fatal errorのような深刻なエラーはクラッシュさせるべき、という思想なのかもしれません。

ios - How do I catch "Index out of range" in Swift? - Stack Overflowには以下のようなコメントがありました。
※読みやすさを重視して、引用部分にオリジナルのコメントに似せたMarkdownを付加しました。

Swift's Error Handling (do/try/catch) is not the solution to runtime exceptions like "index out of range".

A runtime exception (you might also see these called trap, fatal error, assertion failure, etc.) is a sign of programmer error. Except in -Ounchecked builds, Swift usually guarantees that these will crash your program, rather than continuing to execute in a bad/undefined state. These sorts of crashes can arise from force-unwrapping with !, implicit unwrapping, misuse of unowned references, integer operations/conversions which overflow, fatalError()s and precondition()s and assert()s, etc. (And, unfortunately, Objective-C exceptions.)

The solution is to simply avoid these situations. In your case, check the bounds of the array:

if indexPath.section < msgSections.count && indexPath.row < msgSections[indexPath.section].msg.count {
let msg = msgSections[indexPath.section].msg[indexPath.row]
// ...
}

> (Or, as rmaddy says in comments — investigate **why** this problem is occurring! It really shouldn't happen at all.) 他サイトには以下のような記事もありました。こちらも設計上のご参考になるかもしれません。 [Swiftのエラー4分類が素晴らしすぎるのでみんなに知ってほしい - Qiita](http://qiita.com/koher/items/a7a12e7e18d2bb7d8c77)

投稿2017/05/30 21:23

編集2017/05/30 21:40
Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問