【问题标题】: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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-09
        • 1970-01-01
        • 2013-11-28
        • 2018-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多