问题描述
我已经看过WWDC 2020,并认为我会切换代码以使用新的Logger语法。
我经常想打印可选变量的值,这可以通过简单的print命令来完成。如果使用新的Logger命令尝试此操作,则会收到“无法转换'String类型的值?”的信息。到预期的参数类型'NSObject'“错误。建议使用Logger进行此操作的方法是什么?
import os
let logger = Logger(subsystem: "com.example.Fruta",category: "giftcards")
let myOptional: String?
logger.log ("MyOptional is \(myOptional)")
解决方法
(有些混淆)编译器错误的原因是Logger
要求插值类型符合CustomStringConvertible
协议,而{em>不是 { {1}}。
根据所需的输出,您可以将可选内容显式转换为字符串:
Optional
会产生类似
的日志行logger.log ("MyOptional is \(String(describing: myOptional))")
// Equivalently:
logger.log ("MyOptional is \(myOptional.debugDescription)")
或使用nil-coalescing提供默认值:
MyOptional is nil
MyOptional is Optional("abc")
会产生类似日志的行
logger.log ("MyOptional is \(myOptional ?? "<undefined>")")
,
我将在日志调用中直接处理
var myOptional: String?
...
logger.log ("MyOptional is \(myOptional ?? "")")
或更清晰
logger.log ("MyOptional is \(myOptional ?? "<nil>")")