티스토리 뷰

Mobile/iOS

iOS. swift defer

out of coding 2018. 9. 1. 11:21

swift를 사용하면서 이 문법을 사용하는일은 거의 없었습니다.

왜냐면 동일한 리턴을 처리하는 부분이있거나 하지는 않았고 비교후에 다른값을 리턴하는 경우가 생기기는 하였기 때문입니다.


defer란?

현재 스코프를 벗어날 경우에 실행한다는 말입니다.


다시 말해서 현재 사용하고 있는 코드의 블럭안에서 실행되는 마지막 코드가 실행되고 이것이 실행됩니다.


뭐 이렇게 말해도 말이 좀 어렵기는 합니다만... defer를 특정해서 검색하고 들어오신 분들이 많을것 같아서 줄일까합니다.


자 다음 코드를 보면 이해가 쉽겠죠?


1
2
3
4
5
6
7
8
9
10
func test() {
    defer {
        print("3")
    }
 
    print("2")
}
 
print("1")
test()
cs


결과가 어떻게 나올까요?

1, 2, 3 으로 나옵니다.


위에서 아래로 구성이 되는 부분이 아닌 test function을 벗어나는 순간에 동작을 하는 것입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
func test(input: Bool) {
    defer {
        print("out of test")
    }
 
    guard let input = input else { return }
 
    if input {
        // bra
    } else {
        // bra
    }
}
 
cs


뭐 이런 형태의 코드가 있다고 합시다.

엄청나게 좋아보이지는 않지만 설명을 하기 위한 그냥 그런 코드입니다.


원래 defer가 없다면 다음과 같이 짜야했을겁니다. 혹은 function호출하고 난 다음의 라인에 해줘야 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func test(input: Bool) {
    guard let input = input else { 
        print("out of test")
        return 
    }
 
    if input {
        // bra
    } else {
        // bra
    }
 
    print("out of test")
}
 
cs


여기서는 print를 두개를 넣다 보니 좀 좋아보이지는 않습니다.


그래서 사용하는게 defer입니다.


더 길게 설명할게 없네요 ㅎㅎ


defer의 중첩


defer도 잘 안썼는데 중첩해서 사용할 이유는 거의 없을거 같지만 예를 들어 드립니다.


1
2
3
4
5
6
7
8
9
10
func test() {
    defer { 
        print("1")
    }
 
    defer { 
        print("2")
    }
}
 
cs


이렇게 된다면 실행결과는 2, 1 이렇게 됩니다.


결과가 이런 이유는 defer문은 스택에 넣었다가 꺼내와서 사용을 하는데 스택에서 나중에 들어간게 먼저니깐 당연한 결과입니다.


다들 즐거운 코딩되세요.

'Mobile > iOS' 카테고리의 다른 글

iOS. Associated References로 임의 객체 저장  (0) 2018.10.16
Swift. Codable Decoding (2)  (0) 2018.10.07
iOS. Custom View 만들기  (0) 2018.08.14
Swift. AVPlayer 이용하기  (0) 2018.07.08
Swift. @escaping, @autoclosure  (0) 2018.07.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함