Swift

[Swift 5.8] weak self 사용 시 self 생략 가능해짐

Phililip
728x90

안녕하세요.

 

Swift 5.8부터 클로저에서 [weak self] capture를 사용할 때 self가 unwrapped 되었으면 self를 생략할 수 있다는 것 알고 계셨나요??

(전 몰랐습니다..)

 

알아볼게요ㅎㅎ

 


이전 Swift 5.3에서도 클로저 안에서 self를 생략할 수는 있었어요. (SE-0269)

 

다만, 이때는 [self]로 capture 했을 때만 self를 생략할 수 있었고 [weak self]는 지원하지 않았습니다.

 

 

 

Swift 5.8부터는 클로저 내부에서 [weak self]를 선언했다면, guard-let, if-let 등 self를 unwrapping 한 이후부터는 self를 생략할 수 있게 되었습니다.

 

 

 

단, nested 클로저의 경우 retain cycle 위험이 있기 때문에 self를 생략할 수 없습니다.  self를 생략하고 싶으면 클로저 마다 [weak self] capture & self unwrapping을 해줘야 합니다.

 

 

 

그리고, [weak self] capture는 했지만 self unwrapping을 하지 않은 경우에도 self를 생략할 수 없습니다.

 

 

 

 

# 참고

- https://github.com/apple/swift-evolution/blob/main/proposals/0269-implicit-self-explicit-capture.md

- https://github.com/apple/swift-evolution/blob/main/proposals/0365-implicit-self-weak-capture.md

 

 


이번 글은 여기서 마무리.

 

 

 

반응형

'Swift' 카테고리의 다른 글

Opaque and Boxed Types  (0) 2023.07.01
Thread.sleep vs Task.sleep  (0) 2023.06.01
KeychainAccess Array 저장 API 추가하기  (0) 2023.04.20
CasePaths 맛보기  (0) 2023.04.02
Result Builders  (0) 2023.04.02