안녕하세요.
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 |