花了很多时间在Google和SO上找到解决方案,但没有成功。非常希望有人能指出问题所在。
所以我有 objc + swift项目。我有一个Bridging Header
文件,其中有imports
个Objc头文件,需要在Swift中使用。
为了解释这个问题,我将分享两种情况。在第一种情况下,一切正常。在第二个中显示了一个错误。
请注意:两种方案具有相同的代码库。
方案1.无效,显示错误。
'myProjectName-Swift.h' file not found
无法发出预编译的头文件 '/Users/tungfam/Library/Developer/Xcode/DerivedData/myProjectName-ctxxkwqtckhvyoawavmuzmdxqaml/Build/Intermediates.noindex/PrecompiledHeaders/myProjectName-Bridging-Header-swift_1UP5PCPCLBPHP-clang_18PVOch5108TD8S。 用于桥接头 '/Users/tungfam/Developer/myProjectName/myProjectName/App/myProjectName-Bridging-Header.h'
方案2。如何使其发挥作用。
imports
文件中的Bridging Header
imports
文件中的Bridging Header
和使用Objc类的Swift代码的注释。在此问题上的任何帮助将非常感谢。请分享您认为可能有助于解决此问题的任何内容。
我正在使用Xcode 10.0;雨燕4.2
UPDATE1
:我认为它与我在上面放置的第二个错误有关。也许它无法生成该桥接文件。
UPDATE2
:我读到类似的内容:“如果要将名为ABC的Objc文件导入到Bridging Header中,并且如果该ABC将myProjectName-Swift.h文件导入到他自己中。那么这种情况可能会有一些问题,您认为这是真的吗?
答案 0 :(得分:1)
您不得在头文件中使用#import "ProjectName-Swift.h"
。
如果在Obj-C代码中需要Swift类或协议,则可以在相关的Obj-C标头中进行声明。以下是more information:
当Objective-C头文件中的声明引用来自同一目标的Swift类或协议时,导入生成的头会创建一个循环引用。为避免这种情况,请使用Swift类或协议的前向声明在Objective-C接口中对其进行引用。
// MyObjcClass.h
@class MySwiftClass;
@protocol MySwiftProtocol;
@interface MyObjcClass : NSObject
- (MySwiftClass *)returnSwiftClassInstance;
- (id <MySwiftProtocol>)returnInstanceAdoptingSwiftProtocol;
// ...
@end
另外,请注意,您可能在将Swift枚举以及协议和类导入ObjC时遇到问题,因此您可能需要使用@objc
关键字来显式定义想要对ObjC代码可用的项目。>
您将无法在Obj-C中使用Swift结构。
答案 1 :(得分:0)
从Swift到Objective C,您只需在需要访问Swift代码的Objective C类上使用#import "ProjectName-Swift.h"
。无需添加桥接头文件。对于从Objective C到Swift的另一种选择,则需要在桥接头文件中进行声明。