Fit*_*rst 64 objective-c header-files target swift
我通过import语句成功地从Objective C(针对目标'MyApp')调用我的Swift类:
#import "MyApp-Swift.h"
Run Code Online (Sandbox Code Playgroud)
我现在创建了一个名为"MyAppLite"的新目标
当我编译新目标时,我得到错误,因为代码需要"MyApp-Swift.h",但编译器正在创建"MyAppLite-Swift.h"
所以,我需要为#import
我正在编译的目标创建一个条件Swift/ObjC头.
如何做到这一点,还是有更好的方法?
C0D*_*OU5 78
也可以将模块中的Product Module Name
设置设置Build Settings
为相同(我将其设置为$(PROJECT_NAME)
),以便<project>-Swift.h
生成的文件在所有模块中具有相同的名称.这消除了添加/检查预处理器宏的需要.
Mik*_*Fay 57
我发现解决此问题的最佳方法是在Xcode共享项目设置中.您可以搜索以下设置:
Objective-C生成的接口标题名称*
如果将该值设置为公共标题名称(例如"MyProject-Swift.h"),它将应用于每个目标,并且可以安全地在任何Objective-C文件中使用import声明.如果需要,这允许您继续为每个目标使用唯一的产品模块名称.
我在Xcode版本6.4(6E35b)中对此进行了测试.
*注意:这将显示在Swift编译器设置下,只有在项目中添加了Swift源文件时才会显示.此外,如果目标没有与之关联的任何Swift源,则对于该目标的构建设置,Swift编译器选项将不可见.
祝好运!
Dmi*_*aev 31
如果您决定重命名目标或项目,或者SWIFT_MODULE_NAME
按预期使用,以前的答案会有一些问题.
最通用的解决方案是将SWIFT_OBJC_INTERFACE_HEADER_NAME
项目(而不是目标,构建设置)下的("Objective-C生成的接口标题名称")更改为:
$(PROJECT_NAME)-Swift.h
- 每个项目一个;$(SWIFT_MODULE_NAME)-Swift.h
- 每个模块一个(默认值).好吧,我唯一可以解决的方法是...
#ifdef IS_LITE
#import "MyApp_Lite-Swift.h"
#else
#import "MyApp-Swift.h"
#endif
Run Code Online (Sandbox Code Playgroud)
请注意,如果我的产品模块名称中包含“非法”字符,则需要将它们替换为下划线。
希望有帮助!
归档时间: |
|
查看次数: |
15098 次 |
最近记录: |