[英]How to put a #define in an if statement - Objective-C
我正在制作一个iPhone应用程序,并且想进行宽屏检测,所以我制作了一堆#define
,并且希望使用它进行if声明。
// Device and Widescreen Detection
#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
// iPhone
#define IS_IPHONE ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPhone" ] ) || ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPhone Simulator" ] ) )
#define IS_IPHONE_5 ( IS_IPHONE && IS_WIDESCREEN )
// iPod Touch
#define IS_IPOD ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPod touch" ] )
#define IS_IPOD_5 ( IS_IPOD && IS_WIDESCREEN )
// iPad
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
我想发表一个if陈述
if (IS_IPHONE_5) {
...
} else {
...
}
问题是if语句返回错误,XCode一直告诉我这样做
if (IS_IPHONE_5 {
...
} else {
...
}
或这个
if IS_IPHONE_5 {
...
} else {
...
}
否则会产生错误。 哪种写法是正确的?
您在IS_IPHONE
宏定义中缺少括号。 你有:
( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPhone" ] ) || ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPhone Simulator" ] ) )
但您应该具有:
( ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPhone" ] ) || ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPhone Simulator" ] ) )
要查找这些类型的错误,您可以轻松地使用菜单产品 -> 生成输出 -> 预处理文件中的命令 。 这样,您的预处理器宏将得到扩展,您将能够看到最终的代码,因此错误在哪里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.