CocoaLumberjack Swift - 检查日志级别是否包含 .verbose
CocoaLumberjack Swift - Check if log level includes .verbose
多年来我一直在 Swift 和 Obj-C 中使用 CocoaLumberjack 和 pod 'CocoaLumberjack/Swift'。
我正在将代码从 Obj-C 转换为 Swift,但不知道如何将其转换为 Swift:
- (void)functionThatGetsCalledAlot {
if (ddLogLevel & DDLogLevelVerbose) {
DDLogVerbose(@"Log message");
...Many more log statements...
}
}
我只在极少数对性能敏感的情况下使用它,在这些情况下,我只想根据日志级别执行一些代码块。如果动态日志级别 ddLogLevel 包含 DDLogLevelVerbose,则条件将为真,这对于 DDLogLevelVerbose 和 DDLogLevelAll 为真。
如何在 Swift 中写这个?
我只导入了 CocoaLumberjack 的一小部分,但这应该与上面的 Objective-C 代码相同。
if (ddLogLevel.rawValue & DDLogLevel.verbose.rawValue) != 0 {
...
}
(添加)
但据我检查原始定义,此代码(和您的 Objective-C 代码)returns 对于所有预定义的日志级别都是正确的。
您可能需要编写类似这样的内容才能仅命中 DDLogLevelVerbose
和 DDLogLevelAll
。
(Objective-C)
if (ddLogLevel & DDLogFlagVerbose) {
...
}
(Swift)
if (ddLogLevel.rawValue & DDLogFlag.verbose.rawValue) != 0 {
...
}
这里使用的快捷方式是 OptionSet type。日志级别非常适合这个,但不幸的是,在这种情况下,它作为枚举从 ObjC 桥接。
由于底层DDLogFlag
符合OptionSet
,我们可以构建一个解决方法:
extension DDLogLevel {
var flag: DDLogFlag {
return DDLogFlag(rawValue: rawValue)
}
}
然后可以这样使用:
let logLevel = DDLogLevel.all
if logLevel.flag.contains(.verbose) {
print("Verbose is on")
}
多年来我一直在 Swift 和 Obj-C 中使用 CocoaLumberjack 和 pod 'CocoaLumberjack/Swift'。
我正在将代码从 Obj-C 转换为 Swift,但不知道如何将其转换为 Swift:
- (void)functionThatGetsCalledAlot {
if (ddLogLevel & DDLogLevelVerbose) {
DDLogVerbose(@"Log message");
...Many more log statements...
}
}
我只在极少数对性能敏感的情况下使用它,在这些情况下,我只想根据日志级别执行一些代码块。如果动态日志级别 ddLogLevel 包含 DDLogLevelVerbose,则条件将为真,这对于 DDLogLevelVerbose 和 DDLogLevelAll 为真。
如何在 Swift 中写这个?
我只导入了 CocoaLumberjack 的一小部分,但这应该与上面的 Objective-C 代码相同。
if (ddLogLevel.rawValue & DDLogLevel.verbose.rawValue) != 0 {
...
}
(添加)
但据我检查原始定义,此代码(和您的 Objective-C 代码)returns 对于所有预定义的日志级别都是正确的。
您可能需要编写类似这样的内容才能仅命中 DDLogLevelVerbose
和 DDLogLevelAll
。
(Objective-C)
if (ddLogLevel & DDLogFlagVerbose) {
...
}
(Swift)
if (ddLogLevel.rawValue & DDLogFlag.verbose.rawValue) != 0 {
...
}
这里使用的快捷方式是 OptionSet type。日志级别非常适合这个,但不幸的是,在这种情况下,它作为枚举从 ObjC 桥接。
由于底层DDLogFlag
符合OptionSet
,我们可以构建一个解决方法:
extension DDLogLevel {
var flag: DDLogFlag {
return DDLogFlag(rawValue: rawValue)
}
}
然后可以这样使用:
let logLevel = DDLogLevel.all
if logLevel.flag.contains(.verbose) {
print("Verbose is on")
}