Referencing a static NSString * const from another

2019-01-18 09:11发布

In class A I have this:

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

How can I reference this from class B?

3条回答
甜甜的少女心
2楼-- · 2019-01-18 09:52

You need to remove the static -- that specifies that kMyConstant is only visible in files linked with this one.

Then, declare (as opposed to defining) the string in Class A's header:

extern NSString * const kMyConstant;

and import that header wherever you want to use this string. The extern declaration says that there exists an NSString * const by the name kMyConstant whose storage is created in some other place.

If the static definition is already in the header, you need to move it elsewhere (usually the implementation file). Things can only be defined once, and if you try to import a file which defines a variable, you'll get a linker error.

查看更多
倾城 Initia
3楼-- · 2019-01-18 09:54

You should extern your string in the header, and then define the string in the implementation.

//ClassA.h
extern NSString * const kMyConstant;

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

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

...
    NSLog(@"String Constant: %@", kMyConstant);
查看更多
仙女界的扛把子
4楼-- · 2019-01-18 09:55

If it's static, you can't (that's what the static keyword is for).

If you simply declare it as a global variable, however, you can do something like this:

// ClassA.m

NSString *const str = @"Foo";

// ClassB.m

extern NSString *const str;

NSLog(@"str is: %@", str);
查看更多
登录 后发表回答