ios - 桥接 swift 和 objective-c

标签 ios objective-c swift

我有 objective-c 项目,我在其中添加了 swift 文件。我在一些头文件中创建了桥接文件并导入了 swift 文件,没有出现问题。

但我需要将一些头文件导入到 swift 文件中,方法是将它们添加到 "<project-name>-Bridging-Header.h" 中文件。

如果我把头文件放在那个桥接文件中,而这个头文件之前是import swift文件; Xcode 给我错误消息:swift 桥接文件“找不到文件”。

即:

  • 我有一个名为“ProjectBlaBla”的项目

  • 我有一个名为“readingPage.h”的头文件

  • 我有一个名为:“readingSwift.swift”的 swift 文件

  • swift 桥接文件的名称:“ProjectBlaBla-Swift.h”

  • 我创建了头桥文件:“ProjectBlaBla-Bridging-Header.h”

  • 我在“readingPage.h”文件中毫无问题地导入了“ProjectBlaBla-Swift.h”,并在 objective-c 中使用了 swift 类

  • 当我在“ProjectBlaBla-Bridging-Header.h”中导入“readingPage.h”时,我在“readingPage.h”中收到错误消息:"ProjectBlaBla-Swift.h file not found"

    有什么建议吗?

谢谢

最佳答案

您不能在 -Bridging-Header.h 文件中直接或间接引用 -Swift.h 文件。

如果你打开 -Swift.h,你会在顶部附近看到一行,在我的例子中是第 99 行:#import "/Users/.../...-Bridging-Header.h",意思是 -Swift.h 已经导入了 -Bridging-Header.h,所以导入回来会产生循环依赖。

为避免这种情况,您在 -Bridging-Header.h 中导入的任何 header 必须使用对它使用的 Swift 类或协议(protocol)的前向引用,如 answers to this question 中所述。 .

简而言之,如果 readingPage.h 使用名为 MySwiftClass 的 Swift 类,您应该:

  1. readingPage.h 中删除对 -Swift.h 的任何引用。
  2. readingPage.m中导入-Swift.h
  3. 在使用该类之前将 @class MySwiftClass; 插入到 readingPage.h 中,让 Objective-C 知道这样一个类存在并在别处声明。

关于ios - 桥接 swift 和 objective-c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997718/

相关文章:

cocoa-touch - Xcode 4 支持的设备方向

ios - 如何将选择器中的值设置为特定部分的自定义单元格文本字段?

ios - UISplitViewController:在detailView中导航

ios - 如何显示 View Controller 对于来电,即使设备也被锁定并且应用程序处于后台状态?

ios - 将照片库中的图像加载到我的 UIImageView 中,但重新启动应用程序时图像不会更改

ios - Bitcode WatchOS3 - 如何生成

ios - 以编程方式将歌曲从 iTunes 云下载到本地设备

ios - Alamofire 优先队列

ios - 如何在 iOS(自定义)中捕获视频?

iphone - 代码签名错误 : code signing is required for product type 'Application' in SDK 'iOS 4.2'