ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • swift - Capturing Values
    swift 2021. 1. 5. 18:12

    Capturing Values

     

    swift는 3개의 Closure가 있는데 세개 다 각각 값을 캡쳐하는 방식이 다르다.

     

    Function은 값을 캡쳐하지 않음

     

    Nested Function - 자신을 포함하고 있는 함수 바디에 접근할때 이 값을 캡처

     

    클로저 외부에 있는 값에 접근할때 값을 캡처

     


    값을 캡쳐한다?

     

    -> 값을 가져다 쓴다는 의미

    var num = 0
    
    // 여기에서 출력하는 num이라는 값은 closure가 캡처한 값
    // 캡처? -> 값을 가져와서 쓴다.
    
    // 캡처하는 방식
    // 1. object-c : 복사본을 캡처
    // 2. swift : 참조를 캡처 -> 원본을 그대로 가져온다라고 생각하면된다.
    // 그래서 swift에서 캡처한 값을 바꾸면 원본도 바뀐다. (object-c 에서는 원본값이 바뀌지 않음)
    let c = {
        num += 1
        print("check point #1 : \(num) ")
        
    }
    c()
    
    print("check point #2 : \(num)")
    
    
    // 클로저 내부에서 외부에 있는 값에 접근하면 값에 대한 참조를 획득
    // 클로저 내부에서 외부에 있는 값을 바꾸면 외부 값도 바뀜
    // 클로저에서 메모리 관리를 하지 않는다면 참조 사이클 문제가 발생

    중요한 건 클로저 내부에서 외부 값을 가져와 바꾸면 외부 값도 바뀐다!

    'swift' 카테고리의 다른 글

    swift - Tuples  (0) 2021.01.05
    swift - Escaping Closure  (0) 2021.01.05
    swift - Closure Syntax Optimization  (0) 2021.01.05
    swift - Closure  (0) 2021.01.05
    swift - Nested Functions  (0) 2021.01.05

    댓글

Designed by Tistory.