【问题标题】:Implicit declaration of function 'UI_USER_INTERFACE_IDIOM' is invalid in C99函数“UI_USER_INTERFACE_IDIOM”的隐式声明在 C99 中无效
【发布时间】:2018-11-24 06:42:20
【问题描述】:
在 Swift 和 Objective c 混合项目中(链接 https://github.com/shohagHub/Constants)我有一个 Objective C 文件 Constants.h
我在哪里声明一个宏 #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
当我从一个方法返回这个宏时
-(BOOL)isIphone{
return IS_IPHONE;
}
发生以下构建错误
"函数 'UI_USER_INTERFACE_IDIOM' 的隐式声明在 C99 中无效"
如何消除此错误。
【问题讨论】:
标签:
objective-c
swift
xcode
【解决方案1】:
请添加到您的常量.h
#import <UIKit/UIKit.h>
它会工作
【解决方案2】:
您的文件是否导入 UIKit?不,它没有。您的 Constants.h 文件导入 Foundation,而不是 UIKit。改为导入 UIKit,您的代码将编译。
但还要注意:UI_USER_INTERFACE_IDIOM 上的文档明确表示:
如果您的应用在 iOS 3.2 及更高版本中运行,请改用 userInterfaceIdiom。
所以这是对整个 Constants.h 文件的更好重写:
#import <UIKit/UIKit.h>
@interface Constants : NSObject
#define IS_IPHONE ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone)
-(BOOL)isIphone;
@end