swift – 如何解决“字符串插值产生可选值的调试描述;你是否意味着使这个明确?“在Xcode 8.3 beta?

自从beta 8.3以来,数百万条警告“字符串插值产生一个可选值的调试描述;你是否意味着使这个显式?出现在我的代码中。

例如,警告弹出以下情况,选项可能导致零:

let msg = "*** Error \(options["taskDescription"]): cannot load \(sUrl) \(error)"

如以前设计的那样,对于我(和编译器),可选项被内插为“nil”。但是编译器改变了主意。

编译器建议添加一个带有描述的String构造函数,如下所示:

let msg = "*** Error \(String(describing: options["taskDescription"])): cannot load \(sUrl) \(error)"

显然,结果是明确的,但在我看来也非常麻烦。有更好的选择吗?我必须修复所有这些警告,或者更好地等待下一个测试版?

这是07-07中发生的一个变化,因为将可选(…)内插到合成字符串中的情况通常是不希望的,并且可能特别令人惊讶 in cases with implicitly unwrapped optionals.您可以在邮件列表 here上查看对此更改的全面讨论。

如在拉请求讨论中所提到的(尽管不幸的是不是通过Xcode) – 一个比使用String(描述:)更安静一点的方法是将一个转换添加到可插入的任何内容中,因此,例:

var i: Int? = 5
var d: Double? = nil

print("description of i: \(i as Int?)")    // description of i: Optional(5)
print("description of d: \(d as Double?)") // description of d: nil

哪个也可以推广为可选:

print("description of i: \(i as Optional)") // description of i: Optional(5)
print("description of d: \(d as Optional)") // description of d: nil

另一种可能的方法是静警告是访问可选的debugDescription:

print("description of i: \(i.debugDescription)") // description of i: Optional(5)
print("description of d: \(d.debugDescription)") // description of d: nil

虽然值得注意的是,CustomDebugStringConvertible的文档不鼓励直接访问debugDescription。

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...