ios - 干净构建后找不到 myProjectName-Swift.h

标签 ios objective-c swift bridging-header

花了很多时间在谷歌和 SO 上寻找解决方案,但没有成功。非常希望有人能指出可能是什么问题。

所以我有objc+swift 项目。我有一个 Bridging Header 文件,其中包含我需要在 Swift 中使用的 Objc 头文件的 imports

为了解释这个问题,我将分享 2 个场景。在第一种情况下,一切正常。在 2nd 中显示错误。

请注意:这两种情况具有相同的代码库。

场景 1。不起作用,显示错误。

  1. 我打开项目。
  2. 彻底清洁它。
  3. 构建
  4. 显示错误:找不到“myProjectName-Swift.h”文件
  5. 它也显示这样的错误:

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. 我使用场景 1 中的相同代码。
  2. 彻底清理
  3. Bridging Header 文件中注释imports
  4. 注释我使用 Obc 文件的 Swift 代码(在我刚刚在上一步注释的桥接 header 中声明)
  5. 我构建项目。它成功了。
  6. 由于应用程序中的某些部分已损坏,因为我评论了一些东西。我取消注释 Bridging Header 文件中的 imports 和我使用 Objc 类的 Swift 代码。
  7. 再次运行(没有硬清洁),一切正常。

非常感谢在此问题上的任何帮助。请分享您认为可能有助于解决此问题的任何内容。

我正在使用 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/

相关文章:

ios - JSON 解码器 Swift 的潜在错误

iphone - 如何在 Objective-C 中制作一个向上计数的计时器?

c# - C# 部分类和 Objective C 类别之间的区别?

objective-c - 设置 IBOutletCollection 的图层属性

ios - 以编程方式向 UIScrollView 添加按钮时如何禁用水平滚动?

ios - Xcode 7.2 Assets 目录更改

ios - 如何将弹出序列分配给摇动 Action ?

objective-c - 隐藏 JSQMessageViewController 气泡中的链接

swift - 如何快速找到多维数组中项目的索引?

ios - 为整个 NSString 生成 NSRange 的快捷方式?