繁体   English   中英

如何在if语句中放置#define-Objective-C

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM