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

前端之家收集整理的这篇文章主要介绍了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。

猜你在找的Swift相关文章