从Swift中访问Objective C #define常量

问题描述 投票:0回答:1

我有一个现有项目,其中包含Swift和Objective C .h和.m文件。 .h文件之一中有大量

#define kSomeConstant @“某些字符串”

当Swift文件位于应用程序的子项目的框架中时,如何使这些文件可用于项目中的Swift文件?

到目前为止,我已经尝试在.m文件类定义中使包装器静态方法如:

+(NSString *)objc_kSomeConstant {return kSomeConstant; }

而且我已经尝试在.h中执行以下操作:

extern NSString * const kSomeConstant;

。m文件中的定义:

NSString * const kSomeConstant = @“某些字符串”

两种方法均无效。

objective-c swift preprocessor bridging
1个回答
0
投票

要清楚,您在项目的主要应用程序目标的Objective-C头文件中有一些定义,并且希望使它们可用于作为主要项目的子项目的框架目标中的Swift文件。通常,您的应用程序依赖于框架中的定义,而不是相反。要在应用程序和框架之间共享这些定义,请创建可被双方使用的clang编译器module

为此,将带有定义的标头移到一个文件夹(我们将其称为“ Common”)中,并在该文件夹中创建一个名为“ module.modulemap”的文件,其中包含以下内容:

module Common {
    header "CommonDefinitions.h"
}

下一步,在您的框架目标中,将导入路径

设置(在快速编译器-搜索路径下)设置为此文件夹的路径(例如,$(SRCROOT)/Common)。您可能还需要将此文件夹添加到主应用程序的Header Search Paths设置中,以便它将继续成功编译。

现在,只需添加语句import Common,就可以从框架中的Swift文件访问定义。 (请注意,名称#define d作为Objective-C字符串文字,例如您的示例中的kSomeConstant,将作为String常量导入到Swift中;无需将它们重写为extern NSString *声明。)

© www.soinside.com 2019 - 2024. All rights reserved.