如何添加-Swift.h头中使用的前向类引用?

Bil*_*ill 18 objective-c swift

我正在将Swift代码集成到一个大型的Objective-C项目中,但是当我的Swift代码引用Objective-C类时,我遇到了问题.例如,假设我有:

  1. 一个叫做Objective-C的类 MyTableViewController
  2. 一个叫做Objective-C的类 DeletionWorkflow

我声明了一个Swift类如下:

class DeletionVC: MyTableViewController {
  let deleteWorkflow: DeletionWorkflow

  ...
}
Run Code Online (Sandbox Code Playgroud)

如果我现在尝试通过导入ProjectName-Swift.hObjective-C代码来使用这个类,我会得到两个MyTableViewController和未定义的符号错误DeletionWorkflow.

我可以通过导入DeletionWorkflow.h和导入MyTableViewController.h之前修复单个源文件中的问题,ProjectName-Swift.h但这不能扩展到我希望我的Swift和Objective-C经常进行交互的大型项目.

有没有办法添加前向类引用,ProjectName-Swift.h以便当我尝试在我的应用程序中使用Objective-C代码中的Swift类时不会发生这些错误?

joh*_*les 19

您可以创建另一个头文件,用于转发声明或导入必要的类,然后导入ProjectName-Swift.h.例如,创建一个以ProjectName-Swift-Fixed.h内容命名的文件:

// ProjectName-Swift-Fixed.h

// Forward declarations for property classes
@class DeletionWorkflow;

// Imports for superclasses
#import "MyTableViewController.h";

#import "ProjectName-Swift.h"
Run Code Online (Sandbox Code Playgroud)

然后,使用而不是#import "ProjectName-Swift.h"在您的代码库中#import "ProjectName-Swift-Fixed.h.


jtb*_*des 16

这有点傻,但听起来像你的"解决方法"是Apple的意图,至少目前如此.从互操作性指南:

如果在Swift代码中使用自己的Objective-C类型,请确保在将Swift生成的头导入.m要从中访问Swift代码的Objective-C 文件之前导入这些类型的Objective-C头.

这个devforums帖子中,有人提到他们已经在Radar中提交了一个bug.你可能也应该这样.