我正在将使用Lumberjack Logging的Objective-C文件转换为 Swift.它似乎主要是工作,除了我声明ddloglevel的部分. Objective-C方法: #ifdef DEBUGstatic const int ddLogLevel = LOG_LEVEL_INFO;#elsestatic const int ddLogLe
Objective-C方法:
#ifdef DEBUG static const int ddLogLevel = LOG_LEVEL_INFO; #else static const int ddLogLevel = LOG_LEVEL_VERBOSE; #endif
Swift方式:
#if DEBUG let ddLogLevel = LOG_LEVEL_INFO; #else let ddLogLevel = LOG_LEVEL_VERBOSE; #endif
除了我这个编译时错误:使用未解析的标识符’LOG_LEVEL_INFO’
为什么会这样?我该如何解决?
查看库源,LOG_LEVEL_INFO和LOG_LEVEL_VERBOSE是#define宏,Swift不会自动导入.斯威夫特只看到了const.但是,我认为你的方法作为一个整体可能没有意义 – 看起来你正在尝试为全局Objective-C常量ddLogLevel分配一个值. Swift’s let不会为你做那件事 – 它是一个完全不同的命名空间.这是在Swift中无法使用Objective-C宏的基础之上.
最好的办法是在项目中保留一个Objective-C文件(比如说,LoggingConfig.m只包含:
#import "DDLog.h" #ifdef DEBUG static const int ddLogLevel = LOG_LEVEL_INFO; #else static const int ddLogLevel = LOG_LEVEL_VERBOSE; #endif
您使用的库在很大程度上依赖于Objective-C功能,因此最好只使用Objective-C进行配置.
编辑:更详细地查看这个库(之前我从未听说过),在Swift中使用CocoaLumberjack可能不会有用,因为它的主要API是一个名为DDLog的预处理器宏.我不认为这是一个很好的匹配.
