Swift中隐藏(跳过)print()和debugPrint()的方法



最近,我创建了两个Swift函数来覆盖Swift标准库中的print(...)debugPrint(...)。我把这两个功能放在了项目范围内。

func debugPrint(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "n") -> ()
{
#if DEBUG
typealias newDebugPrint = (_ : [Any], _ : Swift.String, _ : Swift.String) -> ()
let castedDebugPrint = unsafeBitCast(Swift.debugPrint, to: newDebugPrint.self)
castedDebugPrint(items, separator, terminator)
#else
// Do nothing...
#endif
}
func print(_ items: Any..., separator: Swift.String = " ", terminator: Swift.String = "n") -> ()
{
#if DEBUG
typealias newPrint = (_ : [Any], _ : Swift.String, _ : Swift.String) -> ()
let castedPrint = unsafeBitCast(Swift.print, to: newPrint.self)
castedPrint(items, separator, terminator)
#else
// Do nothing...
#endif
}

使用上面的函数可以让我们使用原始print(...)debugPrint(...),而不必担心在版本构建中会输出大量消息。但是,在发布版本中使用它们真的安全吗?想知道这种覆盖背后的任何潜在风险吗?

任何想法都将不胜感激!

您不需要做所有这些。。。这实际上是同一件事:

func print(_ items: Any..., separator: String = " ", terminator: String = "n") {
#if DEBUG
items.forEach {
Swift.print($0, separator: separator, terminator: terminator)        
}
#endif
}

您可能还想看看这个答案,进行更多的讨论:https://stackoverflow.com/a/38335438/6257435

我看到你在使用Swift,那么打印是完全安全的,即使对于AppStore构建也是如此。你不会被拒绝,这也不是安全风险。

与类似的NSLog不同,print不会在用户可见的任何位置生成任何日志(例如,在Xcode设备控制台中(。因此,在发布版本构建中永远不需要担心大量的消息输出。

关于print和NSLog之间差异的更多信息:Swift:print((vs println((vs NSLog((

相关内容

  • 没有找到相关文章

最新更新