Swift: 将 Logger 与可选项一起使用
Swift: Using Logger with optionals
我观看了 WWDC 2020,并认为我会切换我的代码以使用新的 Logger 语法。
我经常想打印可选变量的值,我可以使用简单的打印命令来完成。如果我使用新的 Logger 命令尝试此操作,我会收到“无法将类型 'String?' 的值转换为预期的参数类型 'NSObject'”的错误。使用 Logger 执行此操作的推荐方法是什么?
import os
let logger = Logger(subsystem: "com.example.Fruta", category: "giftcards")
let myOptional: String?
logger.log ("MyOptional is \(myOptional)")
我会直接在日志调用中处理
var myOptional: String?
...
logger.log ("MyOptional is \(myOptional ?? "")")
或者更清楚
logger.log ("MyOptional is \(myOptional ?? "<nil>")")
(有点混淆)编译器错误的原因是 Logger
requires that the interpolated types conform to the CustomStringConvertible
协议,不是 Optional
.[=18 的情况=]
根据所需的输出,您可以将可选的显式转换为字符串:
logger.log ("MyOptional is \(String(describing: myOptional))")
// Equivalently:
logger.log ("MyOptional is \(myOptional.debugDescription)")
生成类似
的日志行
MyOptional is nil
MyOptional is Optional("abc")
或使用nil-coalescing提供默认值:
logger.log ("MyOptional is \(myOptional ?? "<undefined>")")
生成类似
的日志行
MyOptional is <undefined>
MyOptional is abc
我观看了 WWDC 2020,并认为我会切换我的代码以使用新的 Logger 语法。
我经常想打印可选变量的值,我可以使用简单的打印命令来完成。如果我使用新的 Logger 命令尝试此操作,我会收到“无法将类型 'String?' 的值转换为预期的参数类型 'NSObject'”的错误。使用 Logger 执行此操作的推荐方法是什么?
import os
let logger = Logger(subsystem: "com.example.Fruta", category: "giftcards")
let myOptional: String?
logger.log ("MyOptional is \(myOptional)")
我会直接在日志调用中处理
var myOptional: String?
...
logger.log ("MyOptional is \(myOptional ?? "")")
或者更清楚
logger.log ("MyOptional is \(myOptional ?? "<nil>")")
(有点混淆)编译器错误的原因是 Logger
requires that the interpolated types conform to the CustomStringConvertible
协议,不是 Optional
.[=18 的情况=]
根据所需的输出,您可以将可选的显式转换为字符串:
logger.log ("MyOptional is \(String(describing: myOptional))")
// Equivalently:
logger.log ("MyOptional is \(myOptional.debugDescription)")
生成类似
的日志行MyOptional is nil
MyOptional is Optional("abc")
或使用nil-coalescing提供默认值:
logger.log ("MyOptional is \(myOptional ?? "<undefined>")")
生成类似
的日志行MyOptional is <undefined>
MyOptional is abc