티스토리 뷰
내용
- Swift 5.7 부터 옵셔널 변수를 언래핑하는 작업이 개선될 예정입니다. 이와 함께 Shadowing 에 대해서 알아봅시다.
Shadowing 이란?
우리는 언래핑을 할 때 안전하게 진행하기 위해서 옵셔널 바인딩을 합니다.
var x: Int?
if let x = x {
// do something with the new x
}
// or
guard let x = x { return }
그리고우리는 결과적으로 x 라는 이름의 새 상수를사용하게 됩니다.
이 작업을 Shadowing 이라고 합니다. (새로운 상수가 언래핑 하고자 했던 옵셔널 변수의 그림자와 같기 때문이라고 합니다.)
실제로 우리가 사용하는 변수의 이름은 더 길고 때로는 훨씬 더 깁니다. 예를들어
var lastTimeUserEnteredTheApp: Date?
if let lastTimeUserEnteredTheApp = lastTimeUserEnteredTheApp {
// do something with the new variable
}
이러한 긴 이름의 옵셔널 변수는 확정된 언래핑 변수 코드를 생성합니다. 즉, 어쩔 수 없이 긴 변수명을 두번이나 사용하게 된다는 것이지요.
그러면 이름을 줄이면 되는 것 아닐까요?
var lastTimeUserEnteredTheApp: Date?
if let date = lastTimeUserEnteredTheApp {
// do something with the new variable
}
이로써 date 로 변수명의 길이를 줄였지만, date 가 무엇을 의미하는지는 불분명 해졌습니다.
적합한 네이밍은 가독성이 좋은 코드를 위해서는 중요한 역할을 합니다. 그래서 옵셔널 변수에 대한 새로운 상수의 변수명을 지정하는 행위 즉, Shadowing 에 대해서 위와 같이 고찰해볼 사항들이 있습니다.
이제 본론입니다! Swift 5.7 은 이러한 상황을 처리하는 흥미로운 새 접근 방식을 가집니다.
Shortening Shadowing
var x: Int?
if let x = x {
// do something with the new x
}
- 위의 코드를 아래와 같이 짧게 작성할 수 있습니다. 와우
If let x {
// do something with the new x
}
변수명이 길어질 경우, 이 방식은 훨씬 유용할거에요.
if let lastTimeUserEnteredTheApp {
// do something
}
// 또다른 shadowing unwrapping 방법에도 적용 가능합니다.
guard let lastTimeUserEnteredTheApp else {return}
하지만, Swif 5.7 에서 허용하는 이러한 방식이 단점도 있습니다.
단점
우리는 앞서 길더라도 = x
를 사용해서 context 즉, 문맥을 제공할 수 있었어요. 하지만 새로운 방식은 x
를 새로운 변수처럼 느끼게 해줍니다.
if var x {
}
앞서 Shadowing 의 단점 중 중복 변수를 만드는 점도 있었습니다. 그러나 이 새로운 방식은 이러한 Shadowing 을 막지 못하고, optional 변수를 숨기는 결과를 제공하게 됩니다.
앞으로 Swift 5.7 버전이 적용되면 사용하면서 느껴봐야할 것 같다.
출처:
Swift 5.7: Unwrapping Optionals Gets an Improvement
swift-evolution/0345-if-let-shorthand.md at main · apple/swift-evolution
'iOS' 카테고리의 다른 글
iOS) 앱 심사 리젝 해결(Guideline 5.1.1 / 5.1.2) (0) | 2022.05.05 |
---|---|
iOS) 강제 업데이트, 최신버전 확인 후 업데이트 (11) | 2022.04.28 |
iOS) 이모지 키보드 높이 대응하기 (2) | 2022.04.17 |
iOS) Firebase 에서 동적링크 만들기 (0) | 2022.04.14 |
iOS) 익스텐션(Extension)이란? (0) | 2022.04.14 |
- OpenSourceLibrary
- APNS
- Firebase
- MOYA
- urlsession
- UserDefaults
- CloneCoding
- watchOS
- Swift
- Algorithm
- WidgetKit
- WWDC
- YPImagePicker
- github
- 2022 KAKAO TECH INTERNSHIP
- Objective-C
- Protocol
- Notification
- configurable widget
- containerBackground
- SwiftUI
- async/await
- 서버통신
- WWDC22
- Widget
- IOS
- RxCocoa
- MVVM
- projectsetting
- rxswift
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Total
- Today
- Yesterday