我开始使用新的编程语言 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, 0, frmt, ##__VA_ARGS__)
有没有任何解决方法可以使预处理器定义在 Swift 中工作?或者有人尝试过类似的事情并取得了更大的成功?
好吧,我刚刚找到了解决方案。编写一个 Objective-C 包装类来调用预处理器并提供调用它的方法。
希望这能帮助其他面临同样问题的人。
我首先创建了一个头文件:
@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");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)