在objective-c中导入swift类,找不到<mymodule> -Swift.h文件

时间:2015-08-19 14:43:24

标签: ios objective-c xcode swift

我有一个用Objective-C编写的iOS项目。我在项目中创建了一个Swift类,成功生成了用于访问Swift中的objective-c的桥接头文件,并且它工作正常。

我的问题是另一种方式。我想在objective-c代码中导入Swift类。

在xcode中,目标 - &gt;构建设置 - &gt; 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

11 个答案:

答案 0 :(得分:68)

2018年5月更新Xcode 9.3

  1. 构建设置 - &gt; Objective-C生成的接口标题名称
    并将值设置为YourModule-Swift.h(这通常已设置,这是您需要在 .m上导入的文件名档案#import "YourModule-Swift.h"
  2. (示例,名为CData的项目)

    Example

    1. 与步骤1相同,转到构建设置并搜索“定义模块”,将两个值都设置为YES

    2. NSObject文件

    3. 上创建一个扩展.swift的类

      Example

      1. 再次构建项目

      2. .m 文件中导入YourModule-Swift.h文件(请注意它区分大小写,Mymodule!== MyModule

        < / LI>

        enter image description here

答案 1 :(得分:9)

OMG ..实际的import语句不是“class-Swift.h”而是“projectname-Swift.h”

如果您在构建设置下查找文件的名称 - > Swift编译器代码生成 - &gt; Objective-C生成的接口标题名称

当我将Swift源拖入GUI时,未生成文件。只有当我右键单击 - >将文件添加到“项目”时。然后它要求生成头文件。

答案 2 :(得分:7)

如果有人想知道为什么花了几个小时在此问题上仍未解决,您可能会遇到类似于我的情况,我实际上是在开发框架,而不是应用程序。

在这种情况下, Objective-C生成的接口头的导入语句的格式如下:


#import <ModuleName/ModuleName-Swift.h>

答案 3 :(得分:5)

我对Daniel Kroms的补充回答:

  • 永远不要将-Swift.h标题添加到标题中。即使它似乎工作。仅将导入添加到.m文件中!

  • 如果您在标题swift类中使用,请在@interface

  • 之前使用@class swiftclassname进行前向声明

然后,您将在代码中看到真正的错误。

答案 4 :(得分:2)

对我来说,问题是我打开了bitcode。当我点击“更新推荐的项目设置”时,它改变了一些可能是罪魁祸首的设置。我在Build Settings中将“Enabled Bitcode”变为“No”,现在已修复。

enter image description here

答案 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 也成功