我有一个用Objective-C编写的iOS项目。我在项目中创建了一个Swift类,成功生成了用于在Swift中访问Objective-c的桥接头文件,并且工作正常。
我的问题是相反的。我想在Objective-C代码中导入Swift类。
在xcode的target- > Build Settings-> Swift Compiler部分中,我看到Objective-C Generated Interface Header Name
带有value的字段myModule-Swift.h
,但是当我在Objective-c类中导入此标头时:
#import "myModule-Swift.h"
我收到编译器错误:
myModule-Swift.h file not found
在项目中,我也找不到该文件。我怎么解决这个问题?
我的xcode版本是6.4
更新于2018年5月Xcode 9.3
- 构建设置-> Objective-C生成的接口头名称
,并将值设置为YourModule-Swift.h(通常已经设置,这是您需要在.m文件上导入的文件名#import "YourModule-Swift.h"
(例如,名为的项目CData
)
-
与步骤1相同,转到“构建设置”并搜索“定义模块”,将两个值都设置为“是”
-
创建一个扩展
NSObject
到.swift
文件的类
-
再次构建项目
-
YourModule-Swift.h
在.m文件上导入文件(请注意,它区分大小写,Mymodule
!==MyModule
)
如果有人想知道为什么在花了几个小时解决这个问题后仍然无法解决,您可能会遇到与我类似的情况,我实际上是在开发框架而不是应用程序。
在这种情况下,Objective-C生成的接口标头的import语句的格式如下:
#import <ModuleName/ModuleName-Swift.h>
OMG ..实际的导入语句不是“ class-Swift.h”,而是“ projectname-Swift.h”
如果在构建设置-> Swift Compiler Code Generation-> Objective-C生成的接口头名称下查找,则可以找到文件的名称。
将Swift源拖入GUI时未生成文件。仅当我右键单击->将文件添加到“项目”时。然后要求生成头文件。
我对Daniel Kroms的回答是:
-
切勿将-Swift.h标头添加到标头中。即使看起来可行。仅将导入添加到.m文件!
-
如果您在标头swift类中使用,请在@interface之前使用@class swiftclassname进行前向声明
然后,您将在代码中看到真正的错误。
对我来说,问题在于我使用了位码。当我单击“更新为推荐的项目设置”时,它更改了一些设置,这可能是罪魁祸首。我在“构建设置”中将“启用的位码”设置为“否”,现在已修复。
我被堆了好一阵子。就我而言,我的目标名称类似于“ my-app”,使用破折号作为目标名称的一部分。我尝试了#import "my-app-Swift.h"
,但是Xcode一直给我错误。
我在“ DerivedData”文件夹下进行了挖掘,然后发现了“ my_app-Swift.h”。因此,如果您使用一些有趣的字符作为目标名称。您可以尝试将其替换为下划线_
。
昨天,我遇到了同样的问题,并花了几个小时修复它,但无济于事。其他人可能和我同在一条船上。我做了上述所有步骤,但没有任何效果。
造成地雷破坏的原因是由于我的整个项目中都有项目名称工件(以前没有正确更改其名称)。
如果上述所有步骤都失败了,我建议像我一样做,并重命名您的项目,以便Xcode可以重置某些内容……这为我解决了问题。这样做就像一种魅力!
就我而言,我忘了检查一个快速的框架以了解我正在使用的目标/类,确实是这样,但将来可能会有所帮助。
对我而言,解决方案是创建一个新目标。出于未知原因,我没有的目标没有“ Swift Compiler-General”设置,因此“ Objective-C生成的接口头名称”字段为no。在项目中指定该字段还不够。
这不是一个确切的答案,而是更多的解决方法,但是在某些困难的情况下可以节省您的时间。如果您按照前面的某些答案的建议,实际上可以找到隐藏在派生数据文件夹中的swift标头,则可以使用完整路径将其导入。这不是特定于swift标头,而是可以应用于任何标头。希望您能找到有用的答案。
文章标签:ios , objective-c , swift , xcode
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!
评论已关闭!