函数'UI_USER_INTERFACE_IDIOM'的隐式声明在C99中无效

时间:2018-11-24 06:42:20

标签: objective-c swift xcode

在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中无效

如何清除此错误。

2 个答案:

答案 0 :(得分:2)

请添加到您的Constants.h #import <UIKit/UIKit.h> 它会工作

答案 1 :(得分:1)

您的文件导入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