Swift/swift 문법

클로저 (1급 객체)

Lyla. 2023. 4. 18. 19:03

: 보통은 익명 함수를 뜻함. 일반적인 함수는 named closure이다. 

 

클로저는 익명함수지만 1급 객체 함수의 특성을 지닌다. 

-> 1급 객체*의 특성

: 함수를 타입으로 인식

1. 함수를 변수에 할당할 수 있음

2. 어떤 함수를 호출할 때 파라미터로서 전달할 수 있음

3. 함수에서 함수를 반환할 수 있음. 

 

 

표현식

var closure : (parameter) -> return_type = {(value : type) -> return_type in
    //code
}

//ex
// "Hello World"를 출력하는 익명함수
var str_closure : () -> String = { () -> String in
    return "Hello World"
}

var str_closure = {() -> String in
    return "Hello World"
}

탈출 클로저 (@escaping)

클로저의 실행이 본래 함수를 벗어나서도 실행되도록 하는 키워드

언제 사용하는가?

  1. 내부 클로저를 외부 변수에 저장
  2. GCD (비동기 코드 사용)
func something2(a: Int, mainwork2: @escaping () -> () ) {
    print(a)
    DispatchQueue.main.async {
        mainwork2()
    }
    print("종료")
}

 

 

클로저는 언제 사용하는가?

: 함수를 사용할 때.. 이외에도 콜백함수로 주로 사용 된다.

//⭐️함수 실행 시⭐️ 실행될 클로저를 정의해주어야함
func something(a: Int, mainwork1: @escaping () -> () ) {
    print(a)
    DispatchQueue.main.async {
        mainwork1()
    }
    print("종료")
}

//실행 시에 mainwork1 클로저 실행 내용 서술
something(a: 1) {
    print("mainwork1 클로저의 실행입니다. ")
}