Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CocoaLumberjack Swift-检查日志级别是否包括。详细_Ios_Swift_Cocoalumberjack - Fatal编程技术网

Ios CocoaLumberjack 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

多年来,我一直在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,则该条件为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)
,它与上面的代码等价。