85
77

More than 5 years have passed since last update.

猿がついに理解できたSwiftのthrow・do・try・catchの意味

Last updated at Posted at 2017-03-10

Swiftでthrow・try・do・catchとか出てくるけど、エラー処理とかやったことなかったから、概念そのものがずっと分からなかった

Qiitaでもいろんな記事があるけど、概念が理解できないと猿の脳みそでは全く理解できない

しかし、このままでは嫌だなと思ったので、そもそもNSErrorってなんなんだ?NSExceptionってなんなんだ?と思いながら、記事をたどって行ったら、throw try do catchなどを分かりやすく説明してくれている記事に遭遇した。

プログラミング入門(例外処理)
(サンプルはJavaですが、概念を理解する上では問題ありませんでした)

もともと猿は文字を読むのが苦手だが、丁寧に読んでみたら理解できた。


そして概念を理解した上でQiitaにあったこの記事を読んだら、驚くほど意味が分かるようになった!
Swift 3.0 エラー処理入門


猿的な理解によればこういうことらしい。

まず、世の中には予想通りの処理ができなかった時にはエラー(Error)や例外(Exception)というものを返してくれるメソッドというものがあるらしい。

こんな姿をしている。

func methodA(text: String) throws {
    if text.isEmpty {
        throw NSError(domain: "errorメッセージ", code: -1, userInfo: nil)
    }
    print(text)
}

メソッド名の最後についているthrowsというのは「このメソッドは例外とかエラーとかを返す可能性があるメソッドだよ」と教えてくれている。
func methodA(text: String) throws {

このthrowsが付いているメソッドを使う時にはエラーや例外が返ってくる可能性があるので、エラーや例外が返ってくる場合に備えて、doとかtryとかcatchを使わないといけないらしいのだ。

それはこんな姿をしている。

func method() {
    do {
        try methodA()
    } catch {
        // エラー処理
    }
}

throwsの付いているmethodAを使う時には呼び出す前にtryをつける必要がある

使う場所はdoで囲み、後ろにはcatchをつける。
そうするとcatchの中にはmethodAでエラーが投げられた場合に(throwされた場合に)して欲しい処理が書ける。

これがthrow -> do -> try -> catch という一連の野球用語的な呪文の意味だ(正しい理解であることを願う)。


再度言うが、これが分かった途端にQiitaの この記事 が驚くほど理解できるようになった。

猿でも分かる記事を書いてくれたお二方には深い感謝の意を評したい。

85
77
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
85
77