我对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文件并定义相关类类型的属性,它就可以工作。
是否有任何人有这个问题或其他类似的并发症?
答案 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