2016-09-05 1 views
0

Swift 클래스에서 생성 된 ObjC 헤더 파일 (Project-Swift.h)에 문제가 있습니다.Swift에서 생성 된 Objective-C 헤더

헤더 파일에는 정의 된 Swift 클래스의 표현과 필수 종속성의 모든 가져 오기가 포함되어 있습니다. 실제로 ObjC와 Swift를 하나의 프로젝트에서 결합했습니다. 내가 외부 프레임 워크에서 Swift 클래스 의 하위 클래스 XYZTableViewController을 만들 때까지 모든 것이 잘 작동합니다. Project-Swift.h에서

@objc class XYZTableViewController: ABCTableViewController { ... }

생성 콘텐츠 : 빠른 파일에서 클래스의

정의

:이 오류와

SWIFT_CLASS("_TtC6Abc22XYZTableViewController") @interface XYZTableViewController : ABCTableViewController - (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER; - (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER; - (nonnull instancetype)initWithStyle:(UITableViewStyle)style OBJC_DESIGNATED_INITIALIZER; @end

컴파일 마무리

Project-Swift.h:140:37: Cannot find interface declaration for 'ABCTableViewController', superclass of 'XYZTableViewController'; did you mean 'UITableViewController'?

모듈을 .m 프레임으로 가져 와서 외부 프레임 워크를 만들고 관련 클래스 유형의 속성을 정의 할 때 작동합니다.

문제가 있거나 비슷한 다른 합병증이 있습니까?

+0

당신이 스위프트 파일 XYZTableViewController에'ABCTableViewController'의 모듈을 가져 했습니까? – Cosyn

+0

예'import ABCKit' 소스 파일의 맨 위에 오른쪽 모듈을 가져 왔습니다. – milanhorvatovic

답변

2

You cannot subclass a Swift class in Objective-C. 취지 : Using Swift with Cocoa and Objective-C.
그렇습니다. ABCTableViewController을 @ 속성으로 사용할 수 있지만 그 속성을 상속 할 수는 없습니다.

+0

Obj-C에서 Swift 프로토콜을 구현할 수 있으므로 다른 옵션이 될 수 있습니다. – Gruntcakes

+0

그 한계에 대해 알고 있지만 클래스 정의가있는 헤더 파일이 생성됩니다. 나는 수업을 스스로 정의하지 않는다. – milanhorvatovic

0

프로젝트 구조에서 문제가 발견되었습니다. 왜 그런지 모르지만 프로젝트에는 사용되지 않는 ObjC++ 소스가 포함되어 있습니다 .mm이 상황에서는 컴파일러가 프로젝트 설정을 무시하고 모듈을 생성하지 않습니다.

도움 및 관련 페이지 :use of @import when modules are disabled