gpt4 book ai didi

ios - CocoaLumberjack with Swift - 调用预处理器宏

转载 作者:行者123 更新时间:2023-11-30 13:47:00 24 4
gpt4 key购买 nike

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

关于ios - CocoaLumberjack with Swift - 调用预处理器宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34804393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com