UFO ET IT

서브 클래 싱 할 때 Objective-c와 swift 혼합

ufoet 2021. 1. 7. 08:20
반응형

서브 클래 싱 할 때 Objective-c와 swift 혼합


'BaseViewController'라는 Swift로 작성된 UIViewController의 하위 클래스가 있습니다. 이제 'BaseViewController'에서 상속하고 싶은 Objective-C로 작성된 'ViewController1'이라는 '오래된'뷰 컨트롤러가 있습니다. 다른 조언에 따라 'Project-Swift.h'헤더 파일을 가져 왔습니다.

내 문제는 이와 같은 하위 클래스를 만들 때 발생합니다.

#import <UIKit/UIKit.h>
#import "MyProject-Swift.h"

@interface ViewController1 : BaseViewController
@end

오류는 다음과 같습니다.

objc_subclassing-restricted 속성으로 클래스를 서브 클래 싱 할 수 없습니다.

@interface ... 줄에 나타납니다.


Objective-C에서 Swift 클래스를 하위 클래스로 만들 수 없습니다.

Cocoa 및 Objective-C와 함께 Swift 사용 에서 발췌


Objective-C에서 Swift 클래스를 하위 클래스로 만들 수 없습니다. cf. 문서의이 섹션부분 :

그러나 Objective-C에서는 Swift 클래스를 서브 클래 싱 할 수 없습니다.


컴파일 오류이므로 U는 objc에서 신속한 클래스를 하위 클래스로 만들 수 없습니다.

SWIFT_CLASS("_TtC6Swifty14ViewController")
@interface ViewController : UIViewController
@end


# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif

참조 URL : https://stackoverflow.com/questions/24204211/mixing-objective-c-and-swift-when-subclassing

반응형