当前位置: 首页 > 面试题库 >

如何在Swift中通过#define宏使用Objective-C代码

闾丘朗
2023-03-14
问题内容

我正在尝试在我的Swift项目中使用第三方Objective-
C库。我已经将该库成功导入到Xcode中,并且已经制作了一个<Project>-Bridging- Header.h文件,可以在Swift中使用Objective-C类。

但是,我似乎遇到了一个问题:Objective-C代码包含Constants.h带有宏的文件#define AD_SIZE CGSizeMake(320, 50)。导入Constants.hmy <Project>-Bridging- Header.h不会导致AD_SIZE我的Swift应用程序可以使用的全局常量。

我做了一些研究,发现“复杂宏”下面的Apple文档说:

“在Swift中,您可以使用函数和泛型来获得与复杂宏一样的结果,而无需做出任何妥协。因此,C和Objective-
C源文件中的复杂宏无法用于您的Swift代码。”

阅读完这些内容后,我可以通过let AD_SIZE = CGSizeMake(320, 50)在Swift中进行指定来使其正常工作,但是如果这些值在我不知情的情况下发生变化,我想保持与该库的将来兼容性。

在Swift或我的桥接标头中,有没有简单的解决方法?如果不是,是否有一种方法可以替换#define AD_SIZE CGSizeMake(320, 50)in Constants.h并保持其与使用旧AD_SIZE宏的任何现有Objective-C应用程序向后兼容?


问题答案:

我通过替换解决了

#define AD_SIZE CGSizeMake(320, 50)

在图书馆的Constants.h使用

extern CGSize const AD_SIZE;

并添加

CGSize const AD_SIZE = { .width = 320.0f, .height = 50.0f };

在库Constants.m文件中。



 类似资料:
  • 问题内容: 我正在迁移课程,以便对Swift进行一些培训。我通过桥接头成功使用了Objective- C代码,但是我需要导入一个包含指令的常量文件。 我在结合Swift和Cocoa和Objective-C(简单宏)中看到以下内容: 简单宏 通常在C和Objective-C中使用指令定义原始常量的地方,在Swift中使用全局常量代替。例如,常数定义可以在Swift中使用更好地表达。由于简单的类似于常

  • 假设我在Swift中定义了一个泛型类,类似于以下内容: (我知道数组有一个稍微好一点的实现,这只是一个例子。) 在Swift中,我现在可以非常容易地使用这个类: 在Xcode 7中,我们现在在Objective-C中拥有泛型,所以我假设我可以在Objective-C中使用这个类: 然而,MyArray从未添加到我的<code>项目Swift中。h文件。即使我将其更改为从NSObject继承,它仍然

  • 本文向大家介绍Swift使用Objective-C代码中的Swift类,包括了Swift使用Objective-C代码中的Swift类的使用技巧和注意事项,需要的朋友参考一下 示例 在同一模块中 在名为“ MyModule ”的模块内,Xcode生成一个名为的标头,该标头MyModule-Swift.h将公共Swift类公开给Objective-C。导入此标头以使用Swift类: 相关的构建设置:

  • 问题内容: 简单地说,我有一个存储应用程序常量的结构,如下所示: 例如,可以通过调用在Swift代码中使用这些常量。但是在我的代码中,它还包含一些Objective- C类。所以我的问题是如何在Objective-C代码中使用这些常量? 如果这种声明常量的方法不好,那么在Swift和Objective-C代码中使用全局常量的最佳方法是什么? 问题答案: 可悲的是,你不能暴露,也不是Objectiv

  • 问题内容: 有什么方法可以在我的Swift项目中使用swift使用用Objective-C编写的CocoaPod吗? 我只是制作桥接头吗?如果可以,我可以在Swift中访问CocoaPod中的库定义的对象,类和字段吗? 问题答案: 您问题的基本答案是,可以,您可以使用CocoaPods构建的Objective-C代码。 更重要的问题是“如何使用此类库?” 这个问题的答案取决于您中的标志: 假设您要

  • 我正在尝试实现音频可视化器到AVAudioPlayer从许多天,尝试了不同的库,但没有成功。现在我发现了一个库displayer,但问题是它在Objective-C中,现在我不知道如何在swift代码中使用它。这里是图书馆https://github.com/agilie/displayers-audio-visualizers的链接。请在这方面指导我,或者在SWIFT中建议我一个好的可视化器。