常数由另一个名称

Dav*_*ong 6 c constants objective-c

首先,我已经看到了这个问题并理解为什么以下代码不起作用.那不是我的问题.

我有一个常数,它被宣布为;

//Constants.h
extern NSString * const MyConstant;

//Constants.m
NSString * const MyConstant = @"MyConstant";
Run Code Online (Sandbox Code Playgroud)

但是,在某些情况下,让常量具有更具描述性的名称更有用MyReallySpecificConstant.我希望这样做:

//SpecificConstants.h
extern NSString * const MyReallySpecificConstant;

//SpecificConstants.m
#import "Constants.h"
NSString * const MyReallySpecificConstant = MyConstant;
Run Code Online (Sandbox Code Playgroud)

显然我不能这样做(这在上面的链接问题中有解释).

我的问题是:

如何(除了类似的东西#define MyReallySpecificConstant MyConstant)我可以在多个名称下提供一个常量?

dra*_*ard 6

通常,编译器会将相同的字符串常量折叠到相同的字符串中,除非您告诉它不要.即使您无法使用另一个常量初始化一个常量,但使用相同的值初始化它们将具有相同的净效果.

//Constants.h
extern NSString * const MyConstant;
extern NSString * const MyOtherConstant;

//Constants.m
#define MyConstantValue "MyConstant"
NSString * const MyConstant = @MyConstantValue;
NSString * const MyOtherConstant = @MyConstantValue;
Run Code Online (Sandbox Code Playgroud)

您将#define隐藏在一个源文件中而不是标题中.您只需在一个地方更改值.一个常量有两个名称.当然,在多个文件中定义常量的场景中,您必须可以访问这些源文件的#define.