-
swift - Capturing Valuesswift 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