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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

1回答

5218閲覧

Swift での例外処理

odorry

総合スコア54

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2014/08/26 12:19

Swift では例外処理はどのように行うべきなのでしょうか?
見落としているだけかもしれませんが、try-catch に関する記述がないように思います。
また、ARC なので、例外をキャッチして、、、というのは好ましくない、
という議論もあるかと思います。

今のところ私はこうしている、などの意見をいただければと思います。

lang

1var array : Array<String> = ["a", "b", "c"] 2var string : String = array[3] // 範囲外 3// 以下、処理が続く

結果的にこのような例外が発生するような自体になってしまった場合に、
即クラッシュというのは厳しいように思います。
※ OutOfRange はわざとで、例外が発生する例として記述しただけです

特に、ライブラリ的なものを作る場合は、例外が発生した場合も含めて
【処理に失敗した】という体でレスポンスを返すようなことも必要だと思います。

実際 Swift ではどうするのでしょう?

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

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

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

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

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

guest

回答1

0

ベストアンサー

NSExceptionが残っていることから、将来的に実装される可能性はありますが
現状、swiftはtry~catchをサポートしていません。
(objective-cとの合わせ技であれば、NSSetUncaughtExceptionHandlerは使えますが)

元々、cocoaのapiにはエラーをNSError**の形で返すものがあり
swiftでもNSErrorPointerとしてそのパターンは利用可能なので
try~catchがなくても特には困らないと思います(objective-cでも困ったことがないので)。

ただ——CoreDataのライブラリは内部で例外を飛ばしていた節があるので
その辺りの実装をappleがswiftでどう対応したのかについては、多少興味はありますが……。

何にせよ
今のところはcocoaの流儀に従ったエラー処理をするのが良いかと思います。

投稿2014/08/28 04:15

bluedome

総合スコア57

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

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

odorry

2014/08/30 07:34

回答ありがとうございます。 try-catch をサポートしていない、ということは、 予見できるエラーは全て NSErrorPointer でやりましょう、ということですかね。 >CoreDataのライブラリは内部で例外を飛ばしていた節があるので・・・ この場合、Swift ではどうするんでしょう? or どうなるんでしょう? 即クラッシュだとけっこう困ってしまうかもしれません。
bluedome

2014/09/01 10:57

CoreDataの件は あくまで内部で例外を飛ばしているような挙動が見られるだけであって 外側(ライブラリを使う側)に影響を及ぼすことはありません(デバッグをしていて気付いただけ)。 よって、objective-cでもswiftでもクラッシュすることなく普通に使えます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問