iOS/iOS
defer
황민우
2022. 3. 18. 21:38
defer?
- 현재 코드 블록을 빠져나가기 전에 꼭 실행해야 되는 코드를 작성하여 코드가 블록을 빠져나가기 전에 꼭 실행시키게 하는 문법
- 작성된 위치와 상관없이 함수 종료 직전에 실행되는 구문
예제
func test() {
print("Test 1")
defer {
print("Test defer")
}
print("Test 2")
}
test()
// 실행결과
// Test 1
// Test 2
// Test defer
예제2 : defer의 실행 순서
- defer 구문끼리의 순서는 역순으로 실행됩니다.
func test() {
print("Test")
defer { print("Test defer1") }
defer { print("Test defer2") }
defer { print("Test defer3") }
defer { print("Test defer4") }
print("Test 5")
}
test()
// 실행 결과
// Test
// Test 5
// Test defer4
// Test defer3
// Test defer2
// Test defer1
defer가 호출되지 않는 경우
1, throw를 이용해 오류를 던질 경우
func test(isError: Bool) throws -> Void {
defer{
print("test1")
}
if isError{
enum TestError: Error{
case error
}
throw TestError.error
}
defer{
print("test2")
}
print("test3")
}
print("== Error True==")
try? test(isError: true)
print("== Error False==")
try? test(isError: false)
// 실행 결과
// == Error True==
// test1
// == Error False==
// test3
// test2
// test1
2, guard문을 사용하여 중간에 함수를 종료하는 경우
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("==string not nil==")
test(string: "test")
// 실행 결과
// ==string nil==
// test 1
// ==string not nil==
// test 3
// test 2
// test 1
3, 리턴 값이 Never(비 반환 함수)인 경우
- 에러가 발생하며 실행이 종료됩니다. (defer는 호출 X)
func test() -> Never {
defer {
print("test 1")
}
defer {
print("test 2")
}
defer {
print("test 3")
}
abort()
}
내용 출처
https://swieeft.github.io/2020/02/26/defer.html
defer 구문 알아보기 - 뀔뀔(swieeft)의 개발새발기
안녕하세요. 오늘은 defer 구문을 알아보려고 합니다. defer는 제가 면접을 보러 다니면서 자주 접했던 Swift 문법 질문으로, 내용은 쉽지만 우리가 놓치고 넘어가기 쉬운 문법 중 하나 입니다. 실제
swieeft.github.io
https://babbab2.tistory.com/80
Swift) defer를 알아보자
안녕하세요 :) 소들입니다 오늘은 Swift의 문법 중 defer라는 것에 대해 공부를 해보려고 합니다~~!!! 간단한 내용이고, 어렵지 않아요!! 모든 포스팅은 편의 말투로 합니다~!! 1. defer가 뭘까 자, 먼저
babbab2.tistory.com