繁体   English   中英

访问 Objective-C #define constant from Swift

[英]Accessing Objective-C #define constant from Swift

我有一个现有项目,其中包含 Swift 和 Objective C.h 和.m 文件。 在其中一个.h 文件中有很多

#define kSomeConstant @"一些字符串"

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

到目前为止,我已经尝试在 .m 文件 class 定义中制作包装器 static 方法,例如:

+ (NSString*) objc_kSomeConstant { 返回 kSomeConstant; }

我已经尝试在.h中做类似以下的事情:

extern NSString *const kSomeConstant;

使用 .m 文件中的定义:

NSString *const kSomeConstant = @"某个字符串"

两种方法都没有奏效。

需要明确的是,您在项目的主应用程序目标中的 Objective-C header 文件中有一些定义,并且您希望将它们提供给 Swift 文件,该文件是项目框架目标中的主项目子文件。 通常,您的应用程序取决于框架中的定义,而不是相反。 要在应用程序和框架之间共享这些定义,请创建一个可供两者使用的 clang 编译器模块

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

module Common {
    header "CommonDefinitions.h"
}

接下来,在您的框架目标中,将Import Paths设置(在Swift Compiler - Search Paths下)设置为该文件夹的路径(例如$(SRCROOT)/Common )。 您可能还需要将此文件夹添加到主应用程序的Header 搜索路径设置中,以便继续成功编译。

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

暂无
暂无

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

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