gpt4 book ai didi

ios - 桥接 swift 和 objective-c

转载 作者:行者123 更新时间:2023-11-28 10:21:05 29 4
gpt4 key购买 nike

我有 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com