[swift] 클로저 캡처 규칙

클로저는 함수와 메서드와 마찬가지로 값이나 참조형으로 사용될 수 있습니다. 클로저 내부에서 외부 변수를 참조할 때, 해당 변수들을 캡처(capture)합니다. 캡처된 변수들은 클로저의 스코프에 포함되며, 클로저가 계속해서 존재하는 한 해당 변수들의 비지역 값을 유지합니다.

클로저의 캡처 규칙은 다음과 같습니다:

  1. 클로저는 자신의 스코프 내에서 정의된 변수 또는 상수를 캡처할 수 있습니다.
  2. 클로저는 부모 함수나 메서드의 변수를 캡처할 수 있습니다.
  3. 클로저가 캡처하는 변수나 상수가 변경되면, 변경된 값이 클로저에 반영됩니다.

클로저 캡처 규칙을 통해 클로저가 외부 변수를 안전하게 캡처하고 사용할 수 있습니다.

예제 코드:

func makeIncrementer(amount: Int) -> () -> Int {
    var total = 0
    return {
        total += amount
        return total
    }
}

let incrementByTwo = makeIncrementer(amount: 2)
print(incrementByTwo()) // 2
print(incrementByTwo()) // 4
print(incrementByTwo()) // 6

위의 예제에서 makeIncrementer 함수 내부의 클로저는 total 변수를 캡처하여 사용합니다. 클로저가 호출될 때마다 total 값이 유지되므로 올바른 결과가 반환됩니다.

더 많은 정보는 Swift 공식 문서를 참고하세요.