使用OSLog(Logger)时字符串插值报错,求解决技巧
解决OSLog(Logger)字符串插值问题的实用技巧
既然你只需要在控制台看日志,不需要OSLog的结构化检索功能,完全可以绕开它的类型安全插值限制,用更简单的方式搞定:
方法1:直接用普通字符串插值
OSLog其实支持把普通String转成OSLogMessage,你可以像以前那样直接拼接内容,再传给日志方法:
let customObj = CustomType(name: "demo") Logger().info("\(customObj) - 当前数值:\(currentValue)")
要是碰到自定义类型转字符串报错,显式用String(describing:)转一下就行:
Logger().info("\(String(describing: customObj))")
方法2:封装个简化日志工具
写个Logger的扩展,把普通字符串自动转成OSLogMessage,省得每次重复处理:
extension Logger { func printLog(_ msg: String, level: OSLogType = .info) { self.log(level: level, "\(msg)") } } // 用起来就跟旧日志方式一样 Logger().printLog("自定义对象:\(customObj),计数:\(count)")
类型歧义问题的快速解决
如果碰到Cannot convert value of type 'String' to expected argument type 'OSLogMessage'这类报错,在字符串外面再加一层\()(也就是你说的双重插值)能临时解决,但用上面两种方法就能彻底摆脱这种繁琐操作。
这种方法虽然放弃了OSLog的结构化日志能力,但完全满足你只看控制台日志的需求,操作和旧日志方式几乎没区别,改造成本最低。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

