在 AI 类中有这个:
static NSString * const kMyConstant = @"my constant string";
我如何从 B 类中引用它?
在 AI 类中有这个:
static NSString * const kMyConstant = @"my constant string";
我如何从 B 类中引用它?
您应该在标题中 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);
您需要删除static
-- 指定kMyConstant
仅在与此链接的文件中可见。
然后,在 Class A 的标头中声明(而不是定义)字符串:
extern NSString * const kMyConstant;
并将该标头导入您要使用此字符串的任何位置。该extern
声明说存在一个NSString * const
名称kMyConstant
,其存储是在其他地方创建的。
如果静态定义已经在标头中,则需要将其移至其他位置(通常是实现文件)。事物只能定义一次,如果您尝试导入定义变量的文件,您将收到链接器错误。
如果它是静态的,则不能(这就是 static 关键字的用途)。
但是,如果您只是将其声明为全局变量,则可以执行以下操作:
// ClassA.m
NSString *const str = @"Foo";
// ClassB.m
extern NSString *const str;
NSLog(@"str is: %@", str);