defer


defer


deferとは?


遅延とは、あらかじめ定義されたように遅延、遅延、遅延を指す.

作成された場所にかかわらず、関数が終了する前に実行される関数で主に使用されます.
これはdefer内部で記述されたコードが関数が終了する前に実行されることを意味する.

deferの使用方法



難しくないです.deferキーワードを使って、括弧の内部を開けて、括弧を閉じて完成しました.

例を見てみましょう。

func f() {
    defer { print("First defer") }
    print("End of function")
}
f()
// Prints "End of function"
// Prints "First defer"
既存の関数のループであれば、関数fが呼び出される.
"First defer"
"Second defer"
End of function"
順番に出力すべきだったのですが、deferを使っていたので順番が変わりました.
それ以外にも、他にも特徴があります.
deferは複数回呼び出すこともネストすることもできます.
ストレージ方式がstackと同じだと考えれば、理解しやすいです.
func f() {
    defer { print("First defer") }
    defer { print("Second defer") }
    print("End of function")
}
f()
// Prints "End of function"
// Prints "Second defer"
// Prints "First defer"
最後にdeferが最初に実行されます.
最初のdeferは最後に実行されます.
重ね合わせの中でも上と同じです.
一番外側のdeferが最初に実行されます.
一番奥のdeferは最後に実行します.
func f() {
    defer {
        defer {
            print("First defer")
        }
        print("Second defer")
    }
}
f()
// Prints "Second defer"
// Prints "First defer"
関数内部でdefer構文が実行される前に関数が終了した場合、defer構文は実行されません.
func f() {
	print("End of function")
    return
    defer { print("First defer") }
    defer { print("Second defer") }
}
f()
// Prints "End of function"
戻り値を持つ関数で使用
deferを使用すると、返された後にdefer構文が実行されます.
func f() -> String? {
    var malrang: String? = "malrang"
    defer {
        malrang = nil
    }
    return malrang
}
print(f())
// "malrang"
関数内部でmallangにnilを加えたのに.
戻り値は「mallang」
defer構文はreturnの後に実行されます!