从Swift生成Objective-C头

时间:2016-09-05 22:11:15

标签: ios objective-c swift xcode

我对Swift类生成的ObjC头文件(Project-Swift.h)有疑问。

头文件包含已定义的Swift类的表示以及所有必需依赖项的导入。实际上我将ObjC和Swift结合在一起。一切正常,直到我想从外部框架创建Swift类XYZTableViewController的子类ABCTableViewController

swift文件中的类定义:

@objc class XYZTableViewController: ABCTableViewController { ... }

Project-Swift.h生成的内容:

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:找不到'ABCTableViewController'的接口声明,'XYZTableViewController'的超类;你是说'UITableViewController'吗?

如果我将模块导入外部框架的.m文件并定义相关类类型的属性,它就可以工作。

是否有任何人有这个问题或其他类似的并发症?

2 个答案:

答案 0 :(得分:2)

You cannot subclass a Swift class in Objective-C.取自Using Swift with Cocoa and Objective-C
所以是的,您可以使用ABCTableViewController作为@property进行合成,但不能继承它。

答案 1 :(得分:0)

我在项目结构中发现了问题。我不知道为什么,但是项目包含未使用的ObjC ++源.mm并且在这种情况下编译器忽略项目设置并且也不生成模块。

有用且相关的页面: use of @import when modules are disabled