微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – 带有Swift的CocoaLumberjack – 调用预处理器宏

我开始使用新的编程语言 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");

原文地址:https://www.jb51.cc/iOS/333023.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐