Lew*_*s42 6 logging swift ios14
我有一个可在 iOS 12 上使用的应用程序。过去我使用过出色的 CocoaLumberjack,但我想转向本机Logger
类。
我很高兴不收集旧版 iOS 版本的日志,但我希望该应用程序能够在那里运行。
有没有什么好办法可以避免#available
到处打电话呢?一般来说我喜欢#available
,但对于日志来说它很笨拙
if #available(iOS 14.0, *) {
logger.info("Setting person from \(self.person, privacy: .public) to \(newValue, privacy: .public)")
}
Run Code Online (Sandbox Code Playgroud)
如果我包装该类Logger
,则无法编译它,因为日志系统有编译时间限制:
import os
public class Logger {
@available(iOS 14.0, *)
static let logger = os.Logger(subsystem: "com.progress", category: "ProgressKit")
public static func debug(_ input: String) {
if #available(iOS 14.0, *) {
logger.debug(OSLogMessage(stringLiteral: input)) // Fails: Argument must be a string interpolation
} else {
print(input)
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用新系统来做到这一点,而无需#available
到处都有声明?
实际上,编译器中有一个特殊情况,以确保OSLogMessage
只能从字符串文字构造。
https://github.com/apple/swift/pull/31109/files
这意味着没有办法包装它,你被迫:
归档时间: |
|
查看次数: |
1624 次 |
最近记录: |