从另一个类引用静态NSString * const

时间:2012-08-13 21:17:33

标签: objective-c static constants

在A班我有这个:

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

我如何从B类中引用它?

3 个答案:

答案 0 :(得分:47)

您应该在标题中对字符串进行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);

答案 1 :(得分:13)

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

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

extern NSString * const kMyConstant;

并在您想要使用此字符串的任何位置导入该标头。 extern声明表示NSString * const存在名称kMyConstant,其存储空间位于其他位置。

如果标题中的静态定义已经,则需要将其移动到其他位置(通常是实现文件)。事情只能定义一次,如果你试图导入一个定义变量的文件,你将会遇到链接器错误。

答案 2 :(得分:4)

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

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

// ClassA.m

NSString *const str = @"Foo";

// ClassB.m

extern NSString *const str;

NSLog(@"str is: %@", str);