상세 컨텐츠

본문 제목

[스위프트꿀팁][Swift 5.8] 클로저에서 weak self (약한참조) 사용시 암시적 으로 self를 허용

iOS 캐기/Swift News

by Atlas 2023. 5. 24. 15:04

본문

728x90
반응형

시나리오 : Xcode14에 포함된 스위프트의 기본버전인 5.8을 사용하게 되면서 클로저에서 weak self (약한참조) 사용시 암시적으로 self를 허용[추출된 (unwrapped) self의 한해서]한다.  하지만 Xcode 14.3 사용자와 14.3 미만 버전의 사용자의 해프닝이 있었다.

 

AS-IS

{ [weak self] in
    guard let self = self else { return }
    self.dismiss()
}

 

guard문을 통해서 self 바인딩을 해주지않으면 [self?] 으로 접근을 해야하니 코드의 beatify를 위해 guard문을 통해 self를 바인딩하여 AS-IS의 코드처럼 self.dissmiss()  [self] 를 사용해야했다. 

 

TO-BE

{ [weak self] in
    guard let self = self else { return }
    dismiss() 
}

하지만 5.8에서는  추출된 self 즉, unwrapped self에 한해서는 암시적으로 접근이 가능하기 때문에 [self]를 붙이지 않고 사용이 가능하다.

Xcode 14.3버전에서는 빌드이슈가 없었던 뤠인님은 "제 노트북에서는 동작합니다만?"을 시전해보려했지만 14.2 버전을 사용하던 악성유저 앨빈을 피해갈 수 없었다.

 

마무리

뤠인님이 기존 코드 컨벤션에 맞춰 self 쓰는걸로 잘 마무리 되었다😎

 

 

 

ref.

https://github.com/apple/swift/pull/40702

 

[SE-0365] Allow implicit self for `weak self` captures by calda · Pull Request #40702 · apple/swift

This PR adds support for implicit self for weak self captures, as long as self has been unwrapped. This implements SE-0365. For example: { [weak self] in guard let self else { return } dism...

github.com

 

반응형

관련글 더보기

댓글 영역