Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- ios
- uiscrollview
- UICollectionView
- tableView
- SWIFT
- combine
- Protocol
- 리팩토링
- swiftUI
- map
- Clean Code
- Xcode
- MVVM
- UITextView
- Refactoring
- 애니메이션
- RxCocoa
- collectionview
- Human interface guide
- ribs
- 리펙토링
- uitableview
- clean architecture
- rxswift
- 리펙터링
- 클린 코드
- 스위프트
- Observable
- HIG
- swift documentation
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] @retroactive 개념 (Swift6, Xcode16) 본문
retroactive 개념
- 단어의 의미
- "효력이 소급하는"이라는 의미
- 소급하다란 의미는 새롭게 적용된 것이 과거에도 영향을 미친다는 의미
- ex) 직장인이 25년도 3월에 연봉이 올랐는데, 1월과 2월 월급도 3월에 연봉 오른 값으로 돈을 더 주는 것
- Swift6.0에서도 @retroactive를 사용하여 코드의 유연성을 가져갈 수 있는데 아래에서 계속 설명
@retroactive의 의미
- 이번 프로젝트에서 Foundation에 있는 Date를 사용하다가 id가 필요하여 내가 임의로 Identifiable을 선언한 상태
extension Date: Identifiable {
public var id: TimeInterval { timeIntervalSince1970 }
}
- 1년 후에 갑자기 애플이 Date에 Identifiable를 conform하도록 채택했다면?
- extension으로 똑같은 프로토콜을 conform하면 컴파일 에러가 발생하는데, 애플에 의해서 아무잘못 없는 내 코드가 컴파일 에러가 나면 너무 유연성이 없어지므로 애플은 아래처럼 컴파일 에러 대신 경고메시지를 출력하도록 함
/tmp/retro.swift:3:1: warning: extension declares a conformance of imported type
'Date' to imported protocol 'Identifiable'; this will not behave correctly if
the owners of 'Foundation' introduce this conformance in the future
extension Date: Identifiable {
^
- 난 이 경고 메시지도 안보이게 하고 싶을때? -> @retroactive를 사용
- @retroactive 소급적용된다는 의미를 생각하여, 의미를 확인하면 애플이 비록 Date에 Identifiable로 conform하는 코드가 생겨났지만, 내 extension을 적용하라는 의미
extension Date: @retroactive Identifiable {
// ...
}
* 참고
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - SwiftUI] 터치 이벤트 받는 방법(contentShape) (1) | 2024.12.10 |
---|---|
[iOS - SwiftUI] VStack, HStack을 사용할 때 주의할 점 (Stack 패딩, Stack 사이즈 고정) (3) | 2024.12.05 |
[iOS - swift] UIPasteBoard.general.changeCount (복사했는지 확인 방법) (1) | 2024.11.12 |
[iOS - swift] UITableViewCell에 pressed 효과 주는 방법 (highlighted 효과, pressed 효과) (3) | 2024.10.24 |
[iOS - swift] 디스플레이 확대/축소 옵션 대응 방법 (UIScreen.main.nativeScale) (0) | 2024.10.18 |
Comments