Edited at

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

More than 1 year has passed since last update.

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でまとめておけば、必ずやって欲しい処理を何度も書く必要はない。


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

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