Ios CocoaLumberjack Swift-检查日志级别是否包括。详细
多年来,我一直在Swift和Obj-C中使用CocoaLumberjack和pod“CocoaLumberjack/Swift” 我正在将代码从Obj-C转换为Swift,但不知道如何将其转换为Swift:Ios CocoaLumberjack Swift-检查日志级别是否包括。详细,ios,swift,cocoalumberjack,Ios,Swift,Cocoalumberjack,多年来,我一直在Swift和Obj-C中使用CocoaLumberjack和pod“CocoaLumberjack/Swift” 我正在将代码从Obj-C转换为Swift,但不知道如何将其转换为Swift: - (void)functionThatGetsCalledAlot { if (ddLogLevel & DDLogLevelVerbose) { DDLogVerbose(@"Log message"); ...Many more log statem
- (void)functionThatGetsCalledAlot {
if (ddLogLevel & DDLogLevelVerbose) {
DDLogVerbose(@"Log message");
...Many more log statements...
}
}
我只在少数性能敏感的情况下使用它,我只想根据日志级别执行一些代码块。如果动态日志级别ddLogLevel包含DDLogLevelVerbose,则该条件为true,对于DDLogLevelVerbose和DDLogLevelAll,该条件为true
如何在Swift中编写此代码?我只导入了CocoaLumberjack的一小部分,但其工作原理应与上面的Objective-C代码相同
if (ddLogLevel.rawValue & DDLogLevel.verbose.rawValue) != 0 {
...
}
(增补) 但就我检查原始定义而言,对于所有预定义的日志级别,此代码(以及您的Objective-C代码)都返回true 您可能需要编写类似这样的代码才能只点击
DDLogLevelVerbose
和DDLogLevelAll
(目标-C)
(Swift)
我只导入了CocoaLumberjack的一小部分,但它的工作原理应该与上面的Objective-C代码相同
if (ddLogLevel.rawValue & DDLogLevel.verbose.rawValue) != 0 {
...
}
(增补) 但就我检查原始定义而言,对于所有预定义的日志级别,此代码(以及您的Objective-C代码)都返回true 您可能需要编写类似这样的代码才能只点击
DDLogLevelVerbose
和DDLogLevelAll
(目标-C)
(Swift)
在这里使用的最快捷的方法是一个。日志级别非常适合这种情况,但不幸的是,在本例中,它作为枚举从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")
}
在这里使用的最快捷的方法是一个。日志级别非常适合这种情况,但不幸的是,在本例中,它作为枚举从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")
}
可能重复:请使用本机
os_日志
而不是这个可怕的框架。可能重复:请使用本机os_日志
而不是这个可怕的框架。(更正)我相信您可以将扩展定义为var-flag:DDLogFlag{return DDLogFlag(rawValue:self.rawValue)}
。检查代码并不等同于OP的代码,但似乎你的答案是正确的。我知道必须有一个更简单的方法来做到这一点!我正在更新我的答案,谢谢@XML和@OOPer感谢您帮助我理解标志和日志级别之间的关系。我使用了if-DDLogFlag(ddLogLevel).contains(.verbose)
,它与上述内容等效。(更正)我相信您可以将扩展定义为var-flag:DDLogFlag{return-DDLogFlag(rawValue:self.rawValue)}
。检查代码并不等同于OP的代码,但似乎你的答案是正确的。我知道必须有一个更简单的方法来做到这一点!我正在更新我的答案,谢谢@XML和@OOPer感谢您帮助我理解标志和日志级别之间的关系。我使用了if-DDLogFlag(ddLogLevel).contains(.verbose)
,它与上面的代码等价。