首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode12和OSLog (os.log):包装OSLogMessage导致编译错误:参数必须是字符串插值

Xcode12和OSLog (os.log):包装OSLogMessage导致编译错误:参数必须是字符串插值
EN

Stack Overflow用户
提问于 2020-07-01 19:31:12
回答 2查看 1.8K关注 0票数 7

在Xcode12/ iOS 14中,OSLog获得了对字符串插值的支持(耶!)。但仍然不可能将钩子轻松地记录到其他渠道,如Crashlytics。

所以我想我只需要做一个简单的包装器并传递参数。然而,关于字符串插值似乎发生了一些神奇的事情。

提供了新的Logger类,它接受一个OSLogMessage作为参数,可以按如下方式使用:

代码语言:javascript
复制
let someVar = "some var"
let logger = Logger(subsystem: "com.my.app", category: "UI")

logger.error("some message")
logger.error("some message with default var: \(someVar)")
logger.error("some message with private var: \(someVar, privacy: .private)")
logger.error("some message with private var: \(someVar, privacy: .private(mask: .hash))")
logger.error("some message with public var: \(someVar, privacy: .public)")

包装新的Logger结构

因此,让我们将其封装在一个结构中:

代码语言:javascript
复制
struct MyLogger {
    let logger = Logger(subsystem: "com.my.app", category: "UI")

    func error(_ message: OSLogMessage) {
        logger.error(message)
    }
}

相同的签名,但不幸的是,编译器不允许这样:

代码语言:javascript
复制
ERROR: Argument must be a string interpolation

此外,尝试调用我的struct还会导致一个奇怪的特定编译器错误:

代码语言:javascript
复制
let logger = MyLogger()
let value = "value"
logger.error("Some log message \(value, privacy: .public)")

收益率:

代码语言:javascript
复制
String interpolation cannot be used in this context; if you are calling an os_log function, try a different overload

直接调用os_log(_: OSLogMessage)而不是新的结构会得到相同的结果。

有没有办法解决这个问题?我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2020-07-22 22:38:20

日志API使用特殊的编译器特性在编译时评估隐私级别。正如诊断程序所说,您必须使用静态(即,在编译时已知)方法或“OSLogPrivacy”属性;它不能是在运行时计算的变量。这意味着如果不使用编译器内部特性,就不能为这些API创建自己的包装器。

Apple Forums

票数 5
EN

Stack Overflow用户

发布于 2021-12-28 13:19:38

我只是使用类似这样的东西来解决这个限制:

代码语言:javascript
复制
struct MyLogger {
    let logger = Logger(subsystem: "com.my.app", category: "UI")

    func error(_ message: String) {
        logger.error("\(message)")
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62675874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档