因此,我开始为现有的Objective-C框架添加Swift。
坏消息是这个过程相当简单,并且看起来像是有效的。也就是说,我让Swift代码看到了obj-c类,并且甚至相当容易地构建了起来。我设置了一个桥接标头,加入了所需内容,更改了模块名称等等,基本上一切都工作得很好。
后来我意识到了一些问题。
首先,在框架中不应该有桥接标头。实际上,我尝试了一个测试项目,但它不让我这么做。但在我的实际项目中,它却可以。
这绝对会导致问题。我认为这是因为它似乎将桥接标头包含在Swift生成的标头中,或者可能是由于它如何导入总头文件的原因之一。我理解让Swift自动使用Umbrella header以及仅此而已的简便性,但出于几个原因,我需要另一个标头文件。
- 从内部框架中导入私有标头而不想公开框架标头。
- 导入我们链接到的其他框架,并需要访问其公共标头。我不想在此框架的总头文件中导入这些其他框架。
在这种情况下,我面临着几个问题。
外部目标无法使用 @import
加载此框架。我也不能直接导入框架的桥接标头。这意味着我无法从另一个目标访问Swift代码。我编写了一个访问器类,这种情况下不是大问题。直到我意识到其中包含一个测试用例目标,所以我不能有效地测试这段代码,除非有某种实现测试的方式,它将位于框架目标中。甚至我的测试目标中都没有办法访问Swift。
那么有没有办法做到这一点?简而言之,“我可以拥有一个混合Swift / Obj-c框架,使其Swift + Obj-c可从外部访问并保留一些私有的Obj-c吗?”