在A班我有这个:
static NSString * const kMyConstant = @"my constant string";
我如何从B类中引用它?
答案 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);