关于ios:在objective-c中导入swift类,未找到< myModule> -Swift.h文件

import swift class in objective-c, <myModule>-Swift.h file not found

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

我的问题是相反的。我想导入Objective-C代码中的Swift类。

在xcode的target->build settings->swift compiler部分,我看到了值为myModule-Swift.hObjective-C Generated Interface Header Name字段,但是当我在我的objective-c类中导入这个头段时:

1
#import"myModule-Swift.h"

我得到编译器错误:

1
myModule-Swift.h file not found

在Project中,我也找不到这个文件。我如何解决这个问题?

我的Xcode版本是6.4


更新日期:2018年5月Xcode 9.3

  • build settings->objective-c生成的接口头名称,并将该值设置为yourmodule swift.h(通常已设置,这是在.m文件#import"YourModule-Swift.h"上需要导入的文件名)。
  • (例如,名为CData的项目)

    Example

  • 与步骤1相同,转到"构建设置"并搜索"定义模块",将两个值都设置为"是"。

  • .swift文件上创建扩展NSObject的类

  • Example

  • 重新构建项目

  • 导入.m文件上的YourModule-Swift.h文件(请注意,它区分大小写,Mymodule!==Mymodule)

  • enter image description here


    天啊。。实际进口声明不是"class swift.h",而是"projectname swift.h"。

    如果在build settings->swift compiler code generation->objective-c generated interface header name下查找,可以找到文件名。

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


    如果有人想知道为什么在花了几个小时讨论这个问题之后,它仍然没有得到解决,你可能会遇到与我类似的情况,我实际上是在开发一个框架,而不是一个应用程序。

    在这种情况下,objective-c生成的接口头import语句的格式如下:

    1
    #import <ModuleName/ModuleName-Swift.h>


    我对Daniel Kroms的补充回答:

    • 不要将-swift.h头添加到头。即使它看起来有效。仅将导入添加到.m文件!

    • 如果在头Swift类中使用,请在@interface之前使用@class SwiftClassName进行正向声明。

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


    对我来说,问题是我用的是比特码。当我单击"更新到推荐的项目设置"时,它更改了一些设置,这可能是罪魁祸首。我在构建设置中将"启用的比特码"改为"否",现在它被修复了。

    enter image description here


    我把这个叠了好一阵子。在我的例子中,我的目标名称类似于"我的应用程序",使用破折号作为目标名称的一部分。我试着用#import"my-app-Swift.h",但xcode一直给我错误。

    我在"DerivedData"文件夹下找到了"my-app-swift.h"。因此,如果您使用一些有趣的字符作为目标名称。您可以尝试用下划线_替换这些内容。


    昨天我遇到了同样的问题,我花了几个小时的时间来解决它,但没有用。其他人可能和我在同一条船上。我完成了上面描述的所有步骤,但没有任何效果。

    破坏我的原因是因为项目名称的工件遍布我的项目(以前不正确地更改了它的名称)。

    如果上述所有步骤都失败了,我建议您像我一样做,并重命名您的项目,以便Xcode可以重置某些东西…这为我解决了问题。这样做真是太有魅力了!