51
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

猿がようやく理解したSwiftのdeferの使いどころ

Last updated at Posted at 2017-03-09

deferという見慣れないものが出てきて、調べてみたのだけれども、

###「スコープを抜ける時にやってほしい処理を書ける」

という説明が多かった。

その説明では???だったので、なんとなく分かったような気もするが、使いどころがわからない感じで放置していた。

が突然、そうか!そういうことか!と分かった気がしたので、メモしておく。


メソッドやfor文などのスコープ内で、途中でreturnしたりbreakしたりして抜けてしまうことがあるけれども、

###「途中で抜けようが抜けまいが必ずやって欲しい処理をあらかじめ書ける」

というのがdeferの使いどころなのだと思った。


コードにするとこんな感じ。

import UIKit


func hoge() {
    
    defer {
        print("途中でreturnしようがしまいがやって欲しい処理をやりました")
    }
    
    // この値を0にしようがしまいが上のdeferは処理される
    let a = 0
    
    guard a == 0 else {
        print("途中で抜けました")
        return
    }
    
    print("最後まで行きました")
    
}

hoge()
// --プリント結果--
// 最後まで行きました
// 途中でreturnしようがしまいがやって欲しい処理をやりました

こうやってdeferでまとめておけば、必ずやって欲しい処理を何度も書く必要はない。


使いどころがわかれば使える。

多分僕も使うようになるだろう。

51
36
6

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
51
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?