gpt4 book ai didi

objective-c - Swift Application 的 Objective C 库中定义的引用类型

转载 作者:可可西里 更新时间:2023-11-01 01:41:52 27 4
gpt4 key购买 nike

我通常是习惯使用 Visual Studio 的 .NET 开发人员,所以如果我弄错了一些 iOS 术语,请原谅我。

我想做的是在新的 Swift iOS 应用程序中引用 Objective-C 库中定义的类型。

具体来说,我正在尝试使用 [本文 ( https://danielsaidi.wordpress.com/2014/09/04/my-approach-to-ioc-in-ios/ ) 的作者描述的 CoreMeta 库进行依赖注入(inject)。

在 XCode 中,我使用 swift 创建了一个新的空白单 View 应用程序,并且添加了对文章中提到的 CoreMeta 库的引用(注意:我对 Xcode 在添加引用。我尝试将库拖放到 swift 应用程序并将两个项目添加到新工作区,但这两种方法都会导致我将要描述的相同问题)

我知道我需要一个桥接头,所以我右键单击 swift 项目并添加一个新文件,选择头文件并添加一个格式为 projectname-bridging-header.h 的新头文件。

我读过的文档建议 Xcode 应该为我创建这个,但我没有弹出这个对话框。

在 swift 项目的build设置中,在常规选项卡下,我添加了 libCoreMeta.a 文件(我假设这是来自 objc 库的构建程序集)和 Swift 编译器下的build设置 - 代码生成我有指向我添加的文件的桥接 header 值。

这是我可能会感到困惑的地方。在桥接头文件中,我尝试执行的导入语句的每个变体都会导致“找不到文件”错误,因此应用程序的其余部分无法使用任何类型。

在文章中,IoCContainer 对象是在 NSObject+IoCContainer.h 中定义的,因此 #import "NSObject+IoCContainer.h"的任何变体似乎都不起作用。

我敢肯定这是我在这里遗漏的非常明显的东西,所以任何帮助都会很棒。

编辑

为了简单起见,我刚刚创建了一个新的 swift 应用程序,向其中添加了 CoreMeta 库,添加了一个 ObjectiveC 文件(并收到了创建桥接 header 的请求),但我仍然无法确定要添加到桥接中的内容header 来访问 CoreMeta 库中的内容。文件结构如下

swift app file structure

和 TestSwiftApp-Bridging-Header.h

header file errors

我显然在 namespace 和其他东西如何与 iOS 一起工作方面存在知识空白

最佳答案

Xcode 为您创建一个桥接 header 。当您单击 File -> New -> File... 然后选择在 Objective-C 项目中创建 Swift 文件或在 Swift 项目中创建 Objective-C 文件时,它会执行此操作:

enter image description here


不过,您可以创建一个桥接 header 而无需执行这些步骤。

不过,重要的不是桥接头名称的格式。桥接头可以有您选择的任何名称。重要的是在build设置中将哪个文件设置为桥接 header 。

首先,在您的项目中创建任何头文件。 enter image description here

在您的 Project Navigator 中,单击目标:

enter image description here

现在点击这里的目标:

enter image description here

然后在此处选择“build设置”:

enter image description here

一直向下滚动到名为“Swift 编译器 - 代码生成”的部分:

enter image description here

请注意:只有当您有要编译的 .swift 文件时,该部分才会实际显示。如果您没有项目正在编译的任何 .swift 文件,那么将已经杂乱无章的build设置选项与您甚至不包括的语言的一整套选项混为一谈是没有意义的在你的项目中。

如果 Xcode 从未为您提供自动配置桥接 header 的选项,则“Objective-C Bridging Header”行要么为空白,要么没有选择文件。您所要做的就是单击此处并输入您的新文件名:

enter image description here

有趣的事情要注意...如果有必要,您可以定义不同的 Debug 和 Release 构建桥接 header 。


关于将库的头文件导入到要用作桥接头文件的文件中时遇到的问题的最后说明:您实际上有必要为您正在使用的库获取头文件的副本使用。您不能只将 .a 文件放入您的项目中。您需要该库附带的 .a 和任何/所有相应的 .h 文件。因此,请确保您的项目中有 .h 文件以及正确设置的桥接 header 。

关于objective-c - Swift Application 的 Objective C 库中定义的引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29064722/

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