-1

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

#define kSomeConstant @"一些字符串"

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

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

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

我尝试在 .h 中执行以下操作:

extern NSString *const kSomeConstant;

使用 .m 文件中的定义:

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

两种方法都没有奏效。

4

1 回答 1

0

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

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

module Common {
    header "CommonDefinitions.h"
}

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

现在可以通过简单地添加语句从框架中的 Swift 文件访问定义import Common。(请注意,名称#defined 作为 Objective-C 字符串文字,就像kSomeConstant在您的示例中一样,作为常量导入到 Swift 中String;不需要将它们重写为extern NSString *声明。)

于 2019-11-22T02:52:20.847 回答