将Project-Swift.h导入到Objective-C类...找不到文件

问题描述 投票:108回答:11

我有一个在Objective-C中启动的项目,我试图将一些Swift代码导入到我之前编写的Objective-C相同的类文件中。

我在同一个项目中使用Swift和Objective-C咨询了Apple docs,以及像这样的SO question,但仍然无济于事:我放入#import "NewTestApp-Swift.h"后继续得到文件未找到错误(NewTestApp的名称是产品和模块)。

这是我到目前为止所做的:

  1. Define Modules,选择YES为应用程序。
  2. 确保产品模块名称中没有任何空格(请参阅下面的问题截图)

我曾尝试在#import "NewTestApp-Swift.h"ViewController.mViewController.h中使用AppDelegate.m,但它们都没有奏效。

我还做错了什么?谢谢你的帮助。


设置截图:


我目前遇到的错误:

ios objective-c xcode swift xcode6
11个回答
126
投票

我遇到了同样的问题,无法让我的项目将swift导入到obj-c类中。使用Xcode 6,(应该适用于Xcode 6+)并且能够以这种方式完成....

  1. 您需要在.h文件中访问的任何类都需要像这样的前向声明

@class MySwiftClass;

  1. 仅在.m文件中,如果代码位于同一项目(模块)中,则需要将其导入

#import "ProductModuleName-Swift.h"

链接到关于它的苹果文档

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_87


1
投票

导入头文件,即

#import "<ProjectName>-Swift.h" 

在.h文件中生成错误,说明:

找不到-Swift.h'文件

并且构建失败。

而是使用:

#import "<ProjectName>-Swift.h"

在.m文件中,即使出现相同的错误,仍然运行项目会抑制错误。

然后可以在.m文件中使用swift类。


0
投票

我遇到了项目名称(目标)的问题。它包括符号“ - ”。所以决定下一步:如果项目名称是“Test-App”,那么导入类的名称是“Test_App-Swift.h”


75
投票

如果Swift代码在Module中(就像你的情况一样):

#import <ProductName/ProductModuleName-Swift.h>

如果Swift代码在项目内(混合Swift和ObjC):

#import <ProductModuleName-Swift.h>

在您的情况下,您必须在* .m文件中添加此行:

#import <NewTestApp/NewTestApp-Swift.h>

重要信息:查看import语句中的“<”

https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html


48
投票

我如何设法将swift导入objective-c:

  • 将模块设置为YES(在项目上 - 不在目标上)
  • 产品模块名称集(在目标上 - 不在项目中)
  • 在您的ViewController.m中导入swift代码: #import "MyProductModuleName-Swift.h"
  • 在你的objective-c项目中添加一个swift文件(File - > New - > Swift),Xcode将创建从objective-c到Swift的桥接头,但这对于使它以相反的方式工作至关重要 - 显然。

感谢Swiftoverload让我意识到实际通过Xcode GUI添加Swift文件,而不仅仅是将现有的swift文件拖放到我的项目中以使其正常工作,这是这个难题的最后一部分:http://nikolakirev.com/blog/using-swift-in-objective-c-project


10
投票

使用Xcode 8.2.1,如果查看Project> Build Settings> Objective-C Generated Interface Header Name,它只显示一个名为Product-Swift.h的头文件

这意味着不是单独从Objective-C .m文件导入每个模块,而是使用单独的-Swift.h文件,只需导入一个聚合所有Swift模块的Product-Swift.h。

我通过寻找单独导入模块的传统方式遇到了同样的问题,但当前版本的Xcode和Swift 3将其更改为仅使用一个标头进行所有模块导入。


6
投票

我在将Swift导入Objective-C项目时遇到了问题。最后,我查看了Derivied Data文件夹,检查Xcode 7生成的内容。文件名与我期待的完全不同。

一旦我获得了实际的文件名,我就导入了该项目并且项目可以构建。


2
投票

DEFINE MODULES:YES并在Obj-C类的.m文件中导入“ProjectName-Swift.h”

这对我来说可以访问Obj-c中的Swift类。


2
投票

在这个问题上花了一个小时,按照这些步骤将帮助您了解缺少的内容:

  1. 打开Xcode首选项并导航到DerivedData文件夹
  2. 在finder中搜索“swift.h”
  3. 如果找不到任何project-swift.h文件,则尚未生成此文件。您通常需要将@objc添加到您的某个swift类并成功构建应用程序,然后Xcode才会生成此文件
  4. 如果找到“xxx-swift.h”文件,请确保import语句包含正确的名称。

how-to-locate-swift-file


1
投票

当我使用git处理项目时,我的团队遇到了同样的问题。一位开发人员尚未将Xcode更新到最新版本(7.3),这是最新的Swift 2.2版本所必需的。因此,编译器没有识别新的Swift语法,也无法为Swift库生成接口(projectname-swift.h)。检查Xcode版本是否是最新版本!


1
投票

在开发过程中,您可能会有任何未完全实现的swift类,因为可能存在一些语法错误。只有当所有swift文件都没有错误时,swift头文件才可用。

确保swift文件中没有语法错误,然后尝试在objective-c文件中导入swift标头