【问题标题】:bridging swift and objective-c桥接快速和客观-c
【发布时间】:2016-01-25 16:42:10
【问题描述】:

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

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

如果我将头文件放在那个桥文件中,并且这个头文件之前是 import swift 文件; Xcode 给我错误信息:swift bridge 文件的“file not found”。

即:

  • 我的项目名称叫做:“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"

    有什么建议吗?

谢谢

【问题讨论】:

    标签: ios objective-c swift


    【解决方案1】:

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

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

    为避免这种情况,您在 -Bridging-Header.h 中导入的任何标头都必须使用对其使用的 Swift 类或协议的前向引用,如 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 知道这样的类存在并在其他地方声明。

    【讨论】:

      【解决方案2】:

      检查桥接头路径是否正确。在左侧,选择您的项目名称 -> TARGETS -> 构建设置 -> 搜索 Objective-C Bridging Header。请参考下面的照片。

      【讨论】:

        【解决方案3】:

        两种选择

        1. 在“readingPage.m”文件而不是“readingPage.h”文件中导入“ProjectBlaBla-Swift.h”
        2. 创建一个名为“Prefix.pch”的新 PCH 文件,并在“Prefix.pch”文件中导入“ProjectBlaBla-Swift.h”。

        注意:Prefix.pch 是一个预编译头文件,它可以加快编译速度。您不需要重新导入在 prefix.ch 文件中导入的任何文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多