来自导入的Objc头文件中#define的未解析标识符

时间:2017-11-25 13:29:47

标签: objective-c swift objc-bridging-header

我有一个Obj-c类“constants.h”,如下所示:

//  constants.h

#import <Foundation/Foundation.h>

@interface constants : NSObject
#define kLookAhead 3600*24*7*4 //seconds*hours*days*weeks
end

在myProduct-Bridging-Header.h中,我有:

#import "constants.h"

但是,当我在Swift类中调用kLookAhead时,例如像这样

let timeInterval = kLookAhead

我收到错误消息“使用未解析的标识符'kLookAhead'”

我在myProduct-Bridging-Header.h中导入的所有其他类都运行正常,并且kLookAhead已在我的objc类中成功使用。

有什么我应该知道的吗?

1 个答案:

答案 0 :(得分:1)

在Swift中,通过桥接头文件可以使用简单的宏。来自Apple的documentation

  

您通常使用#define指令定义基元   在C和Objective-C中常量,在Swift中使用全局常量   代替。例如,常量定义#define   使用let可以在Swift中更好地表达FADE_ANIMATION_DURATION 0.35   FADE_ANIMATION_DURATION = 0.35。因为简单的常量宏   直接映射到Swift全局变量,编译器自动完成   导入在C和Objective-C源文件中定义的简单宏。

所以,你认为你的宏应该作为全局常量可用是正确的。但是,我猜这种乘法使得编译器很难将宏视为一个简单的宏。

我将结果用作示例项目的宏,并且工作正常

#define kLookAhead 2419200 //seconds*hours*days*weeks

let timeInterval = kLookAhead // worked