mzgkworks

iOSを中心にプログラミング関係について書く

【Swift】必ず処理されるdefer

黒帯本iOS開発の基礎を学び直す。
P.65 Chapter 2-02

defer内に定義した処理は、メソッド終了時に必ず呼び出される

defer {
    メソッド終了時に行いたい処理
}

throw発生時にも終了時刻を出力させる例

func longMethod() throws {
    // なんらかの処理(エラー発生時にthrowを行う)
}

// longMethod()を利用する
do {
    // 正常・エラーに関わらず処理終了時に必ず行う処理
    defer {
        print("処理終了時刻: \(NSDate())")
    }

    print("処理開始時刻: \(NSDate())")
    try longMethod()    // try句をつける
} catch {
    print("エラー発生")
}

throw発生時の出力結果

  • 処理開始時刻: 2016-03-29 02:10:10
  • 処理終了時刻: 2016-03-29 02:10:15
  • エラー発生