Swift

Designated initializer cannot be declared in an extension

Phililip
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 구현하는 것을 허용하지 않는다고 알려져 있습니다.

 

 

# 참고

 

In Swift, why cannot we add designated initializers in extension? - Justin Eghtedari

In Swift, why cannot we add designated initializers in extension? Blog Justin Eghtedari

codedstuff.com


이번 글은 여기서 마무리.

 

 

 

반응형