我有 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 类,您应该:
- 从
readingPage.h
中删除对-Swift.h
的任何引用。 - 在
readingPage.m
中导入-Swift.h
- 在使用该类之前将
@class MySwiftClass;
插入到readingPage.h
中,让 Objective-C 知道这样一个类存在并在别处声明。
关于ios - 桥接 swift 和 objective-c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997718/