728x90
안녕하세요.
Swift를 사용해 보셨다면, 이런 에러를 몇 번 보셨을 거예요.
Designated initializer cannot be declared in an extension of 'SomeClass'; did you mean this to be a convenience initializer?
그 이유는 Swift가 extension에서 designated initializer를 구현하는 것을 허용하지 않기 때문입니다.
그 이유를 알아볼게요.
Swift가 extension에서 designated initializer 구현하는 것을 허용한다고 가정해 볼게요.
아래 코드가 허용되겠죠.
Person 클래스를 상속받은 Korean 클래스가 있어도 크게 문제 될 건 없죠.
(Person 클래스의 designated initializer가 Korean 클래스에서 그대로 사용할 수 있기 때문)
이때, extension에서 Korean 클래스의 designated initializer를 구현한다면 기존 코드에서 에러가 나게 됩니다.
(Person 클래스의 designated initializer를 쓸 수 없기 때문이죠)
그럴 수 있지 않나 할 수도 있지만, 만약 이런 상황이 Apple이 제공하는 클래스에서 생긴다고 생각해 보면, Apple이 제공하는 designated initializer를 사용하지 못하는 이슈가 생길 수 있어요.
이러한 이유 때문에 Swift는 extension에서 designated initializer 구현하는 것을 허용하지 않는다고 알려져 있습니다.
# 참고
이번 글은 여기서 마무리.
반응형
'Swift' 카테고리의 다른 글
JSON을 enum associated value로 Decoding 하기 (1) | 2024.09.03 |
---|---|
map, compactMap, flatMap (0) | 2024.08.18 |
lazy var 클로저에서 retain cycle이 생기는 경우 (0) | 2024.06.20 |
@propertywrapper (0) | 2024.06.07 |
protocol initializer가 클래스에서 required로 정의되어야 하는 이유 (0) | 2024.05.12 |