我开始使用新的编程语言
Swift构建一个IOS应用程序.我设法使用CocoaPods并且能够在我的AppDelegate.swift中使用我的CustomLoggerFormatter(Objective-C)成功创建DDTTYLogger并将其附加到记录器.
var customLoggerFormatter = CustomLoggerFormatter() var consoleLogger: DDTTYLogger = DDTTYLogger.sharedInstance() consoleLogger.setLogFormatter(customLoggerFormatter) DDLog.addLogger(consoleLogger)
但问题是,CocoaLumberjack库正在使用预处理器宏来处理记录器方法,如DDLogVerbose(@“..”)
这是在DDLog.h中定义的:
#define DDLogVerbose(frmt,...) LOG_OBJC_MAYBE(LOG_ASYNC_VERBOSE,LOG_LEVEL_DEF,LOG_FLAG_VERBOSE,frmt,##__VA_ARGS__)
是否有任何解决方法使预处理器定义在Swift中工作?或者有没有人尝试类似的东西更成功?
解决方法
好的,我刚刚找到了解决方案.编写一个Objective-C Wrapper类,调用预处理器并提供调用它的方法.
希望这将有助于其他人面临同样的问题.
我首先创建了一个头文件:
@interface DDLogWrapper : NSObject + (void) logVerbose:(NSString *)message; + (void) logError:(NSString *)message; + (void) logInfo:(NSString *)message; @end
与相应的实现:
#import <Foundation/Foundation.h> #import "DDLogWrapper.h" // Logging Framework Lumberjack #import "DDLog.h" #import "DDASLLogger.h" #import "DDTTYLogger.h" // Definition of the current log level #ifdef DEBUG static const int ddLogLevel = LOG_LEVEL_VERBOSE; #else static const int ddLogLevel = LOG_LEVEL_ERROR; #endif @implementation DDLogWrapper + (void) logVerbose:(NSString *)message { DDLogVerbose(message); } + (void) logError:(NSString *)message { DDLogError(message); } + (void) logInfo:(NSString *)message { DDLogInfo(message); } @end
重要的是将DDLogWrapper.h文件添加到ProjectName-Bridging-Header.h文件,然后您可以在Swift中实例化DDLogWrapper并调用方法logVerbose,logError,logInfo ..
使用以下代码,我能够创建一个日志语句:
DDLogWrapper.logVerbose("TEST");