花了很多时间在谷歌和 SO 上寻找解决方案,但没有成功。非常希望有人能指出可能是什么问题。
所以我有objc+swift 项目。我有一个 Bridging Header
文件,其中包含我需要在 Swift 中使用的 Objc 头文件的 imports
。
为了解释这个问题,我将分享 2 个场景。在第一种情况下,一切正常。在 2nd 中显示错误。
请注意:这两种情况具有相同的代码库。
场景 1。不起作用,显示错误。
- 我打开项目。
- 彻底清洁它。
- 构建
- 显示错误:
找不到“myProjectName-Swift.h”文件
- 它也显示这样的错误:
failed to emit precompiled header '/Users/tungfam/Library/Developer/Xcode/DerivedData/myProjectName-ctxxkwqtckhvyoawavmuzmdxqaml/Build/Intermediates.noindex/PrecompiledHeaders/myProjectName-Bridging-Header-swift_1UP5PCPCLBPHP-clang_18PVO5108TD8S.pch' for bridging header '/Users/tungfam/Developer/myProjectName/myProjectName/App/myProjectName-Bridging-Header.h'
场景 2。如何让它发挥作用。
- 我使用场景 1 中的相同代码。
- 彻底清理
- 在
Bridging Header
文件中注释imports
- 注释我使用 Obc 文件的 Swift 代码(在我刚刚在上一步注释的桥接 header 中声明)
- 我构建项目。它成功了。
- 由于应用程序中的某些部分已损坏,因为我评论了一些东西。我取消注释
Bridging Header
文件中的imports
和我使用 Objc 类的 Swift 代码。 - 再次运行(没有硬清洁),一切正常。
非常感谢在此问题上的任何帮助。请分享您认为可能有助于解决此问题的任何内容。
我正在使用 Xcode 10.0; swift 4.2
UPDATE1
:我认为它与我在上面放置的第二个错误有关。可能它无法生成那个桥接文件。
UPDATE2
:我读到类似这样的内容:“如果您将名为 ABC 的 Objc 文件导入到桥接 header 中。如果此 ABC 将文件 myProjectName-Swift 导入到自己中.h.那么这个case可能会有些问题,你觉得它能成真吗?
最佳答案
您不得在头文件中使用#import "ProjectName-Swift.h"
。
如果您在 Obj-C 代码中需要 Swift 类或协议(protocol),您可以在相关的 Obj-C header 中转发声明它们。这是 more information关于:
When declarations in an Objective-C header file refer to a Swift class or protocol that comes from the same target, importing the generated header creates a cyclical reference. To avoid this, use a forward declaration of the Swift class or protocol to reference it in an Objective-C interface.
// MyObjcClass.h
@class MySwiftClass;
@protocol MySwiftProtocol;
@interface MyObjcClass : NSObject
- (MySwiftClass *)returnSwiftClassInstance;
- (id <MySwiftProtocol>)returnInstanceAdoptingSwiftProtocol;
// ...
@end
此外,请注意,将 Swift 枚举、协议(protocol)和类导入 ObjC 时可能会遇到问题,因此您可能需要使用 @objc
显式定义要对 ObjC 代码可用的项目关键字。
而且您将无法在 Obj-C 中使用 Swift 结构。
关于ios - 干净构建后找不到 myProjectName-Swift.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52891836/