VesselWheel

값 캡쳐하기 : capturing values 본문

Xcode Study

값 캡쳐하기 : capturing values

JasonYang 2023. 10. 16. 14:38

import UIKit

 

// 값 캡쳐하기 : capturing values

//    ㄴ 값을 가져와서 사용한다는 의미

 

var num = 10

 

// 클로저 함수 내부에서 밖에 있는 값을 참조하는 경우 값을 캡쳐함

// swift 의 경우 해당 변수의 주소를 가져와서 사용함

// 클로저 함수 내부에서 밖에 있는 변수의 값을 변경하면

// 클로저 함수 밖에 있는 변수의 값이 변경됨

let c = {

    num += 1

    print("check point #1 : \(num)")

}

c()

 

// 클로저 함수 내부에서 밖에 있는 변수의 값을 변경하면

// 클로저 함수 밖에 있는 변수의 값이 변경됨

print("check point #2 : \(num)")

 

print("-------------------------")

 

// Escapting Closure

//  ㄴ 함수의 실행 흐름에서 벗어남

 

 

// 함수의 실행 흐름에서 벗어나지 않음

func performNonEscaping(closureFunc: () -> ()){

    print("performNonEscaping 함수 시작")

    closureFunc()

    print("performNonEscaping 함수 종료")

}

 

// performNonEscaping 호출하기 + closure 작성

performNonEscaping {print("여기는 클로저함수임")}

 

 

print("---------Escapting Closure 1--------")

/*

 performEscaping 함수가 종료되어도

 클로저 함수는 메모리에 남아있다가 (3초 동안)

 나중에 실행됨

 */

func performEscaping(closureFunc: @escaping () -> ()){

    print("performEscaping1 함수 시작")

    

    // parameter 로 전달된 closure 함수를 3 초 후에 호출함

    DispatchQueue.main.asyncAfter(deadline: .now() + 3){

        closureFunc()

    }

    print("performEscaping1 함수 종료")

}

 

// performEscaping 호출하기 + closure 작성하기

performEscaping {

    print("여기는 클로저함수임")

}

 

print("---------Escapting Closure 2--------")

 

func performEscaping2(closureFunc: @escaping () -> ()){

    print("performEscaping2 함수 시작")

    

    var number = 10

    

    // parameter 로 전달된 closure 함수를 3 초 후에 호출함

    DispatchQueue.main.asyncAfter(deadline: .now() + 5){

        closureFunc()

        print("performEscaping2 함수의 지역변수 number :",number)

    }

    print("performEscaping2 함수 종료")

}

 

// performEscaping2 호출하기 + closure 작성하기

performEscaping2 {

    print("여기는 클로저함수임")

}

'Xcode Study' 카테고리의 다른 글

Tuple Decomposition  (0) 2023.10.16
tuple  (0) 2023.10.16
Closure  (0) 2023.10.16
내부 함수 : nested functions  (0) 2023.10.16
function type - 함수의 자료형(2/2)  (0) 2023.10.16