# 遅延実行
Swiftで、ある一連の処理が終わったあとに別の処理を実行させたい場合はdefer文を使うことができます。
# defer
defer文は、あるスコープの処理の実行が終わった後に実行されます。
func test() {
    defer {
        print("defer文が実行されました")
    }
    print("Hello")
}
test()
// Hello
// defer文が実行されました
# 用途
defer文は最後に必ず実行したい処理などに使われます。
例えば、ファイルにアクセスしたあとにクロージングするときなどです。
func updateFile() {
    let file: FileHandle? = FileHandle(forReadingAtPath: filepath)
    defer { file?.closeFile() } // 処理の実行後にファイルを閉じる
    // 処理を実行
}
また、コールバック関数を必ず実行したいときなども有用です。
func fetchUser(callback: (_ user: User) -> Void) {
    var user: User?
    // 最後に必ずコールバックが実行される
    defer {
        guard let user = user else {
            fatalError("nil")
        }
        callback(user)
    }
    // 処理の実行
}
# 複数のdefer文
複数のdefer文があった場合は、下に定義された順番に実行されます。
func test() {
    defer {
        print("defer文が実行されました 2番目")
    }
    defer {
        print("defer文が実行されました 1番目")
    }
    print("Hello")
}
test()
// Hello
// defer文が実行されました 1番目
// defer文が実行されました 2番目
# for-in文の場合
for-in文の中にdefer文を書いた場合は、for-in文の繰り返し文が終わった度に実行されます。
func test() {
    for i in 0...5 {
      defer {
        print("defer文が実行されました")
      }
      print(i)
    }
    print("終わりました")
}
test()
// 0
// defer文が実行されました
// 1
// defer文が実行されました
// 2
// defer文が実行されました
// 3
// defer文が実行されました
// 4
// defer文が実行されました
// 5
// defer文が実行されました
// 終わりました