21

在 AI 类中有这个:

static NSString * const kMyConstant = @"my constant string";

我如何从 B 类中引用它?

4

3 回答 3

48

您应该在标题中 extern 字符串,然后在实现中定义字符串。

//ClassA.h
extern NSString * const kMyConstant;

//ClassA.m
NSString * const kMyConstant = @"my constant string";

//ClassB.h/m
#import "ClassA.h"

...
    NSLog(@"String Constant: %@", kMyConstant);
于 2012-08-13T21:23:21.800 回答
14

您需要删除static-- 指定kMyConstant仅在与此链接的文件中可见。

然后,在 Class A 的标头中声明(而不是定义)字符串:

extern NSString * const kMyConstant;

并将该标头导入您要使用此字符串的任何位置。该extern声明说存在一个NSString * const名称kMyConstant,其存储是在其他地方创建的。

如果静态定义已经在标头中,则需要将其移至其他位置(通常是实现文件)。事物只能定义一次,如果您尝试导入定义变量的文件,您将收到链接器错误。

于 2012-08-13T21:21:50.317 回答
4

如果它是静态的,则不能(这就是 static 关键字的用途)。

但是,如果您只是将其声明为全局变量,则可以执行以下操作:

// ClassA.m

NSString *const str = @"Foo";

// ClassB.m

extern NSString *const str;

NSLog(@"str is: %@", str);
于 2012-08-13T21:22:34.543 回答