我有一个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类中成功使用。
有什么我应该知道的吗?
答案 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