현재 코드 블록을 나가기 전에 꼭 실행해야 되는 코드
func test() {
defer {
print("test function end")
}
print("Hello world")
}
defer의 호출 순서는 역순!
func test(isError: Bool) throws -> Void{
defer {
print("test 1")
}
if isError {
enum TestError: Error {
case error
}
throw TestError.error
}
defer {
print("test 2")
}
print("test 3")
}
print("==Error True==")
try? test(isError: true)
print("\n==Error False==")
try? test(isError: false)
func test(string: String?){
defer {
print("test 1")
}
guard let str = string else {
return
}
defer {
print("test 2")
}
print("test 3")
}
print("==string nil==")
test(string: nil)
print("\n==string not nil==")
test(string: "test")
func test() -> Never {
defer {
print("test 1")
}
defer {
print("test 2")
}
defer {
print("test 3")
}
abort()
}
에러가 발생하면서 함수를 반환하지 않고 실행을 종료하기 때문에 defer가 호출되지 않는다!