【问题标题】:Using an Objective-C typedef void in Swift在 Swift 中使用 Objective-C typedef void
【发布时间】:2019-04-25 00:33:36
【问题描述】:

我在一个新的 Swift 环境中使用了一个 Objective-C API。在大多数情况下,一切都很好,但我陷入了 typedef 问题。

API 有一个 typedef 定义为:

typedef void* TESTHANDLE;

通常在 Objective-C 中,我会像声明任何类型的变量一样简单地使用它:

TESTHANDLE NewTestHandle;

下图是一个使用它的 Objective-C 项目的示例。

我想在 Swift 中声明一个新的 TESTHANDLE 变量,就像我上面做的那样。我需要稍后在代码中为 TestHandle 分配一个值,该值是 TESTHANDLE 类型。

阅读此内容后,我发现 typealias 现在是可行的方法,但我无法更改 API。

如何在 Swift 中使用 Objective-C 中的 typedef?

【问题讨论】:

  • 我添加了更多信息。我不确定用来表达我的观点的确切术语。
  • 谢谢马特,我会根据这些信息挖掘更多内容
  • 我找到了一些关于桥接stackoverflow.com/questions/27886861/…的信息
  • TESTHANDLE TestHandle 就像在Swift 中写Int i。这不是有效的语法。 Swift 语法是let testHandle: TESTHANDLE = ...

标签: objective-c swift typedef type-alias


【解决方案1】:

您只需在项目中添加一个桥接头即可。

以如下Objective C类为例:

  1. 将头文件添加到您的项目中。默认命名约定是 -Bridging-Header.h

  2. 使用#import 语句将您的 Objective-C API 标头导入此标头。

  1. 在项目 Build Setting 下,将此标头设置为您的 Objective-C 和 Swift 世界之间的桥梁,方法是将其路径放在“Objective-C Bridging Header”中。您的 .xcodeproj 的相对路径将简单有效。

  1. 照常使用 Swift 中的类型

但请记住,在 Swift 中,所有此类类型都将被视为 UnsafeRawPointerUnsafeMutableRawPointer

【讨论】:

  • 感谢 Ayan,这是拼图的第一步!我现在有另一篇文章,我会在一分钟后在这里发布一个链接,以防万一你也能帮助我!
  • stackoverflow.com/questions/55840722/… 是我的新查询,如果你有时间
猜你喜欢
  • 2014-12-04
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多