快速和客观的桥接-c

时间:2016-01-25 16:42:10

标签: ios objective-c swift

我有Objective-c项目,我在其中添加了swift文件。我在一些头文件中创建了桥文件并导入了swift文件而没有任何问题。

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

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

即:

  • 我的项目名称叫做“ProjectBlaBla”
  • 我有一个名为“readingPage.h”的头文件
  • 我有swift文件叫:“readingSwift.swift”
  • swift bridge file的名字:“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"

    有什么建议吗?

感谢

3 个答案:

答案 0 :(得分:3)

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

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

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

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

  1. -Swift.h删除对readingPage.h的所有引用。
  2. -Swift.h
  3. 中导入readingPage.m
  4. 在使用类之前将@class MySwiftClass;插入readingPage.h,让Objective-C知道这样的类存在并在其他地方声明。

答案 1 :(得分:1)

检查桥接标头路径是否正确。在左侧,选择您的项目名称 - &gt;目标 - &gt;构建设置 - &gt;搜索Objective-C桥接标题。请参阅下面的照片。

Bridging Header

答案 2 :(得分:0)

两个选项

  1. 导入&#34; ProjectBlaBla-Swift.h&#34;在&#34; readingPage.m&#34;文件而不是&#34; readingPage.h&#34;文件
  2. 创建一个名为&#34; Prefix.pch&#34;的新PCH文件。并导入&#34; ProjectBlaBla-Swift.h&#34;在&#34; Prefix.pch&#34;内文件。
  3. 注意:Prefix.pch是一个预编译的头文件,可以更快地进行编译。您无需重新导入在prefix.ch文件中导入的任何文件。