繁体   English   中英

迅速而客观的桥梁

[英]bridging swift and objective-c

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

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

如果我将头文件放在该桥接文件中,并且此头文件之前是导入的swift文件; Xcode给我错误消息:快速桥文件“找不到文件”。

即:

  • 我的项目名称为:“ 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中导入的任何标头都必须使用对Swift类或它使用的协议的前向引用,如对此问题的回答所述

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

  1. readingPage.h删除对-Swift.h所有引用。
  2. 进口-Swift.hreadingPage.m
  3. 插入@class MySwiftClass; 在使用readingPage.h之前将其放到readingPage.h ,让Objective-C知道该类存在并在其他地方声明。

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

桥接头

两种选择

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM