我在我的 iOS 项目(sharekit)中使用了一个开源组件,他们在头文件中定义了静态变量。例如,在SHKConfig.h
他们将App Name定义为:
#define SHKMyAppName @"My App Name"
我想做的是使这种动态化;我不想在该特定文件中硬编码这些变量。由于头文件中显然没有viewDidLoad
方法(据我所知),我怎么可能动态分配这个变量?
这甚至可能吗?
非常感谢您提前!!!
我在我的 iOS 项目(sharekit)中使用了一个开源组件,他们在头文件中定义了静态变量。例如,在SHKConfig.h
他们将App Name定义为:
#define SHKMyAppName @"My App Name"
我想做的是使这种动态化;我不想在该特定文件中硬编码这些变量。由于头文件中显然没有viewDidLoad
方法(据我所知),我怎么可能动态分配这个变量?
这甚至可能吗?
非常感谢您提前!!!
#define
总是在代码编译期间评估。您应该修改库以获得此功能。
另一种解决方案如下。创建一些Provider
类
+ (NSString *)getYourConstant;
方法并使用以下宏
#import "Provider.h"
#define kTheConstantYouNeed [Provider getYourConstant]
您可以使用ifdef
宏预处理器在编译时重新定义变量。您无法“更改该变量”,因为它甚至不是一个变量。这是一个用 替换所有出现的SHKMyAppName
宏@"My App Name
。
这是你可以做的。使用您正在构建的项目名称定义一个编译器变量(您可以在 XCode 项目配置中执行此操作)。然后,替换#define
为:
#if defined(PROJECT_APP_01_BUILD)
#define SHKMyAppName @"My App 01"
#elif defined(PROJECT_APP_02_BUILD)
#define SHKMyAppName @"My App 02"
#elif defined(PROJECT_APP_03_BUILD)
#define SHKMyAppName @"My App 03"
#endif
这样,当您编译App 01时,宏SHKMyAppName
将替换为@"My App 01"'. When you are compiling **App 02**, macro
SHKMyAppName will be replaced by
@"My App 02"'。依此类推,依此类推。
您可以将这些定义移动到单个 appinfo.h 文件中,并将其包含在其他标头中。
这也可能是版本信息的好地方。
例如
在 SHKConfig.h 中:
#include "MyAppInfo.h"
#define SHKMyAppName MyAppName // define MyAppName elsewhere
在 MapAppInfo.h 中:
#define MyAppName "Bla bla"
或者...
在 SHKConfig.h 中:
#define SHKMyAppName MyAppName // define MyAppName elsewhere
并在应用程序的编译器设置中添加:
-DMyAppName=\"Bla bla\"