我有一个用Objective-C编写的iOS项目。我在项目中创建了一个Swift类,成功生成了用于访问Swift中的objective-c的桥接头文件,并且它工作正常。
我的问题是另一种方式。我想在objective-c代码中导入Swift类。
在xcode中,目标 - >构建设置 - > Swift编译器部分,我看到Objective-C Generated Interface Header Name
字段的值为myModule-Swift.h
,但是当我在 objective-c 类中导入此标题时:
#import "myModule-Swift.h"
我收到编译错误:
myModule-Swift.h file not found
在项目中,我也找不到这个文件。我该如何解决这个问题?
我的xcode版本是6.4
答案 0 :(得分:68)
答案 1 :(得分:9)
OMG ..实际的import语句不是“class-Swift.h”而是“projectname-Swift.h”
如果您在构建设置下查找文件的名称 - > Swift编译器代码生成 - > Objective-C生成的接口标题名称
当我将Swift源拖入GUI时,未生成文件。只有当我右键单击 - >将文件添加到“项目”时。然后它要求生成头文件。
答案 2 :(得分:7)
如果有人想知道为什么花了几个小时在此问题上仍未解决,您可能会遇到类似于我的情况,我实际上是在开发框架,而不是应用程序。
在这种情况下, Objective-C生成的接口头的导入语句的格式如下:
#import <ModuleName/ModuleName-Swift.h>
答案 3 :(得分:5)
我对Daniel Kroms的补充回答:
永远不要将-Swift.h标题添加到标题中。即使它似乎工作。仅将导入添加到.m文件中!
如果您在标题swift类中使用,请在@interface
然后,您将在代码中看到真正的错误。
答案 4 :(得分:2)
对我来说,问题是我打开了bitcode。当我点击“更新推荐的项目设置”时,它改变了一些可能是罪魁祸首的设置。我在Build Settings中将“Enabled Bitcode”变为“No”,现在已修复。
答案 5 :(得分:1)
我已经堆了很久了。就我而言,我的目标名称就像&#34; my-app&#34;使用短划线作为目标名称的一部分。我尝试#import "my-app-Swift.h"
,但Xcode一直给我错误。
我挖掘了DerivedData&#39;文件夹,我发现&#34; my_app-Swift.h&#34;。因此,如果您使用一些有趣的字符作为目标名称。您可以尝试替换带有下划线的_
。
答案 6 :(得分:0)
昨天我遇到了同样的问题并且工作了几个小时来解决它无济于事。其他人可能与我在同一条船上。我完成了上述所有步骤,但没有任何效果。
我的破坏的原因是因为项目名称工件遍布我的项目(从之前更改其名称不正确)。
如果上述所有步骤都失败了,我建议像我一样做,并重命名你的项目,以便Xcode可以重置某些东西......这解决了我的问题。 这样做就像一个魅力!
答案 7 :(得分:0)
就我而言,我忘了检查一下我正在使用的目标对象/类的快速框架,确实是这样,但将来可能会有所帮助。
答案 8 :(得分:0)
对我来说,解决方案是创建一个新目标。由于未知的原因,我没有的目标具有“ Swift Compiler-General”设置,因此“ Objective-C生成的接口头名称”字段为no。在项目中指定该字段还不够。
答案 9 :(得分:0)
这不是一个确切的答案,而是更多的解决方法,但是在某些困难的情况下可以节省您的时间。如果您按照前面的某些答案的建议,实际上可以找到隐藏在派生数据文件夹中的swift标头,则可以使用完整路径将其导入。这不是特定于swift标头,而是可以应用于任何标头。希望您能找到有用的答案。
答案 10 :(得分:-1)
这个答案解决了我的问题,但令我困惑的是,当我将 bitcode 转换为 YES,然后清理 Xcode DerivedData,再次 bulid,Bulid 也成功