我有一个在Objective-C中启动的项目,我试图将一些Swift代码导入到我之前编写的Objective-C相同的类文件中。
我在同一个项目中使用Swift和Objective-C咨询了Apple docs,以及像这样的SO question,但仍然无济于事:我放入#import "NewTestApp-Swift.h"
后继续得到文件未找到错误(NewTestApp
的名称是产品和模块)。
这是我到目前为止所做的:
Define Modules
,选择YES
为应用程序。我曾尝试在#import "NewTestApp-Swift.h"
,ViewController.m
和ViewController.h
中使用AppDelegate.m
,但它们都没有奏效。
我还做错了什么?谢谢你的帮助。
设置截图:
我目前遇到的错误:
我遇到了同样的问题,无法让我的项目将swift导入到obj-c类中。使用Xcode 6,(应该适用于Xcode 6+)并且能够以这种方式完成....
@class MySwiftClass;
#import "ProductModuleName-Swift.h"
链接到关于它的苹果文档
导入头文件,即
#import "<ProjectName>-Swift.h"
在.h文件中生成错误,说明:
找不到-Swift.h'文件
并且构建失败。
而是使用:
#import "<ProjectName>-Swift.h"
在.m文件中,即使出现相同的错误,仍然运行项目会抑制错误。
然后可以在.m文件中使用swift类。
我遇到了项目名称(目标)的问题。它包括符号“ - ”。所以决定下一步:如果项目名称是“Test-App”,那么导入类的名称是“Test_App-Swift.h”
如果Swift代码在Module中(就像你的情况一样):
#import <ProductName/ProductModuleName-Swift.h>
如果Swift代码在项目内(混合Swift和ObjC):
#import <ProductModuleName-Swift.h>
在您的情况下,您必须在* .m文件中添加此行:
#import <NewTestApp/NewTestApp-Swift.h>
重要信息:查看import语句中的“<”
我如何设法将swift导入objective-c:
#import "MyProductModuleName-Swift.h"
感谢Swiftoverload让我意识到实际通过Xcode GUI添加Swift文件,而不仅仅是将现有的swift文件拖放到我的项目中以使其正常工作,这是这个难题的最后一部分:http://nikolakirev.com/blog/using-swift-in-objective-c-project
使用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将其更改为仅使用一个标头进行所有模块导入。
我在将Swift导入Objective-C项目时遇到了问题。最后,我查看了Derivied Data文件夹,检查Xcode 7生成的内容。文件名与我期待的完全不同。
一旦我获得了实际的文件名,我就导入了该项目并且项目可以构建。
DEFINE MODULES:YES并在Obj-C类的.m文件中导入“ProjectName-Swift.h”
这对我来说可以访问Obj-c中的Swift类。
当我使用git处理项目时,我的团队遇到了同样的问题。一位开发人员尚未将Xcode更新到最新版本(7.3),这是最新的Swift 2.2版本所必需的。因此,编译器没有识别新的Swift语法,也无法为Swift库生成接口(projectname-swift.h)。检查Xcode版本是否是最新版本!
在开发过程中,您可能会有任何未完全实现的swift类,因为可能存在一些语法错误。只有当所有swift文件都没有错误时,swift头文件才可用。
确保swift文件中没有语法错误,然后尝试在objective-c文件中导入swift标头