我通过 import 语句成功从 Objective C 调用我的 Swift 类(对于目标“MyApp”):
#import "MyApp-Swift.h"
我现在创建了一个名为“MyAppLite”的新目标
当我编译新目标时,我收到错误,因为代码需要“MyApp-Swift.h”,但编译器正在创建“MyAppLite-Swift.h”
因此,我需要为我正在编译的目标创建一个条件 Swift/ObjC 标头
#import
。
如何做到这一点,或者有更好的方法吗?
也可以将
Product Module Name
中的 Build Settings
设置设置为在各个模块中相同(我将其设置为 $(PROJECT_NAME)
),以便生成的 <project>-Swift.h
文件在所有模块中具有相同的名称。这消除了添加/检查预处理器宏的需要。
我发现解决此问题的最佳方法是在 Xcode 共享项目设置中。您可以搜索以下设置:
Objective-C 生成的接口标头名称*
如果您将该值设置为通用标头名称,例如“MyProject-Swift.h”,它将应用于您的每个目标,并且您可以在任何 Objective-C 文件中安全地使用导入声明。如果需要,这允许您继续为每个目标使用唯一的产品模块名称。
我已经在 Xcode 版本 6.4 (6E35b) 中对此进行了测试。
*注意:这将出现在您的 Swift 编译器设置下,仅当您将 Swift 源文件添加到项目中时才可见。此外,如果目标没有任何与其关联的 Swift 源,则 Swift 编译器选项对于该目标的构建设置将不可见。
祝你好运!
好吧,我能解决的唯一方法就是......
#ifdef IS_LITE
#import "MyApp_Lite-Swift.h"
#else
#import "MyApp-Swift.h"
#endif
请注意,如果我的产品模块名称中有任何“非法”字符,则需要用下划线替换它们。
希望有帮助!
我将适当的 #import
唯一的工作方式如下:
1-从第一个目标(具有有效的桥接)构建设置选择Objective C桥接标题
2- 复制 Objective C 桥接头
3-打开另一个目标构建设置
4-粘贴
5-将头文件更改为新的头文件(即目标B.h)
(现在您可以选择两个目标)