我在iOS项目(sharekit)中使用了一个开源组件,他们在头文件中定义了静态变量。例如,在SHKConfig.h
中,他们将应用名称定义为:
#define SHKMyAppName @"My App Name"
我想做的是让这种动态;我不想在那个特定文件中对这些变量进行硬编码。由于头文件中显然没有viewDidLoad
方法(据我所知),我怎么可能动态分配这个变量?
这甚至可能吗?
非常感谢你提前!!!
答案 0 :(得分:3)
#define
。您应该修改库以获得此功能。
另一种解决方案如下。使用
创建一个类Provider
+ (NSString *)getYourConstant;
方法并使用以下宏
#import "Provider.h"
#define kTheConstantYouNeed [Provider getYourConstant]
答案 1 :(得分:1)
您可以使用ifdef
宏预处理器在编译时重新定义变量。你无法“改变那个变量”,因为它甚至不是一个变量。这是一个MACRO,用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
@“我的应用02”替换。等等,等等。
答案 2 :(得分:1)
您可以将这些定义移动到单个appinfo.h文件中,并将其包含在其他标题中。
这也可能是版本信息的好地方。
E.g。
在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
在app的编译器设置中添加:
-DMyAppName=\"Bla bla\"