我有一个源文件来放置我的所有常量(constant.h
),如下所示:
#define MY_URL @"url"
#define SECOND_URL @"url2"
...
我的问题是用这样的条件声明一个常数:
if (ipad)
#define MY_CONSTANT @"ipad"
else
#define MY_CONSTANT @"iphone"
请问我该怎么做并将其放入constant.h
?
我有一个源文件来放置我的所有常量(constant.h
),如下所示:
#define MY_URL @"url"
#define SECOND_URL @"url2"
...
我的问题是用这样的条件声明一个常数:
if (ipad)
#define MY_CONSTANT @"ipad"
else
#define MY_CONSTANT @"iphone"
请问我该怎么做并将其放入constant.h
?
如果您同时支持 ipad 和 iphone,则直到运行时才知道设备。
如果您使用常量标头,那么您可以按如下方式处理设备特定定义:
常量.h
NSString * MON_CONSTANT();
常数.m
NSString * MON_CONSTANT() {
switch (UI_USER_INTERFACE_IDIOM()) {
case UIUserInterfaceIdiomPhone :
return @"iphone";
case UIUserInterfaceIdiomPad :
return @"ipad";
default :
return @"omg";
}
}
笔记:
#define
您的常量,请改用该extern NSString* const
方法。#define MY_CONSTANT ( ipad ? @"ipad" : @"iphone" )
或者
#define MY_CONSTANT ( (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? @"ipad" : @"iphone" )
编辑:以上内容适用于实时做出决定的通用应用程序。如果您想要编译时间决定,那么我通常在 IPAD 或 IPHONE 的 Xcode 目标中使用 PreProcessor Macro,甚至是 UNIVERSAL(构建 3 种方式):
#if defined(IPHONE)
#define MY_CONSTANT 4
#elif defined(IPAD)
#define MY_CONSTANT 6
#elif defined (UNIVERSALO)
#define MY_CONSTANT ( ipad ? 6 : 4 )
#endif
我觉得写起来很乏味,读起来也很乏味:
(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
所以我创建了全局 BOOL 变量并在 appDelegate 中设置了值(在初始化中),然后放了一个“extern BOOL iPad;” 我的 pch 文件中的声明。在初始化:
ipad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? YES : NO;
我知道我知道,全局变量不好等等——是的,如果你过度使用它们,但对于这样的事情,它们是完美的。