Swift,Objective-Cプログラミング ~ iOS ~

Objective-C,Swift,Apple Watchなどのプログラミング

【iOS Swift入門 #248】Swift2.0からのエラーハンドリング(Error Handling)のサンプル

Swift2.0でエラーハンドリングができるようになったので、 少し試しておく。

エラーの定義

エラーはErrorTypeを継承したenumにケースとして追加する。

enum CustomError: ErrorType{
     case UnexpectedString
}

エラーを投げる処理の作成

引数に数字をインプットすると、
加算して、数値として返すメソッドを作成しました。

引数が数字でない場合、Errorを返します。

エラーが発生するメソッドには下記2つを行う
1. メソッド引数のカッコ()の後ろにthrowsと書く
2. メソッドの処理の中でエラーを投げる処理「throw エラー名」を書く

func addNum(a: String, b: String) throws -> Int{
     guard let aNum = Int(a) else{
          throw CustomError.UnexpectedString
          return -1
     }

     guard let bNum = Int(b) else{
          throw CustomError.UnexpectedString
          return -1
     }

     return aNum + bNum
}

エラーハンドリングする

エラーハンドリングをするには下記3つを行う。 1. エラーが発生する処理をdo{}で囲む 2. エラーが発生するメソッドの前にtryをつける 3. do{}のあとにエラーの種類に応じた数のcatch エラー名{エラー処理}を書く

tryがあると、ソースを見た人は、ここエラーが発生するのだとわかりやすい。 また、catchでどんなエラーが発生するかわかりやすい。

do{
    let num = try addNum(abc, b: def)
    print(num)
}
catch CustomError.UnexpectedString{
    print("数字以外が入力された")
}
catch{
    print("Unknown Error")
}

上記のコードをもとにしたサンプル

XcodeでSingle View Applicationを新規作成し、 ViewController.swiftを下記のようにする。

ViewDidLoad:の中にある定数num1が数字でないので、 エラーが返されるので、catchで拾って処理します。

import UIKit

class ViewController: UIViewController {
    enum CustomError: ErrorType{
        case UnexpectedString
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let num1 = "a"
        let num2 = "3"

        do{
            let num = try addNum(num1, b: num2)

            print(num)
        }
        catch CustomError.UnexpectedString{
            print("数字以外が入力された")
        }
        catch{
            print("Unknown Error")
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func addNum(a: String, b: String) throws -> Int{
        guard let aNum = Int(a) else{
            throw CustomError.UnexpectedString
        }

        guard let bNum = Int(b) else{
            throw CustomError.UnexpectedString
        }

        return aNum + bNum
    }

}

結果

エラーをcatchで拾い、コンソールにエラーメッセージが表示された。

f:id:fjswkun:20150828075646p:plain

参考情報



  • iOSアプリ開発未経験の人向けを終えたくらいの知識の方向け