2

我已经观看了 WWDC 2020,并认为我会切换我的代码以使用新的 Logger 语法。

我经常想打印可选变量的值,我可以使用简单的打印命令来完成。如果我使用新的 Logger 命令尝试此操作,我会收到“无法转换类型为‘字符串’的值?’ 到预期的参数类型'NSObject'”错误。使用 Logger 执行此操作的推荐方法是什么?

import os

let logger = Logger(subsystem: "com.example.Fruta", category: "giftcards")

let myOptional: String?

logger.log ("MyOptional is \(myOptional)")
4

2 回答 2

2

(有点混淆)编译器错误的原因是Logger要求插值类型符合CustomStringConvertible协议,.Optional

根据所需的输出,您可以将可选项显式转换为字符串:

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
于 2020-09-05T09:55:13.837 回答
1

我会直接在日志调用中处理它

var myOptional: String?
...
logger.log ("MyOptional is \(myOptional ?? "")")

或者更清楚

logger.log ("MyOptional is \(myOptional ?? "<nil>")")
于 2020-09-05T09:55:00.837 回答