苹果的CustomStringConvertible
文档说:
不鼓励直接访问类型的
description
属性 [...] 。
为什么?
下面是一个使用description
对我来说似乎有用的示例。否则我怎么会得到相同的结果?
func dontPrintNil(_ s: String?) {
if s == nil {
print("placeholder")
} else {
print(s!)
}
}
let s: String? = nil
dontPrintNil(s) // → placeholder
dontPrintNil(s?.description) // → placeholder
dontPrintNil(String(describing: s)) // → nil
dontPrintNil("(s)") // → nil
作为提示,同一文档的先前版本如下:
注意:
String(instance)
适用于任何类型的instance
,如果instance
恰好CustomStringConvertible
,则返回其description
。 因此,不建议使用CustomStringConvertible
作为泛型约束,或直接访问符合类型的description
。
对我来说,这表明他们担心的是人们不必要地不遗余力地将值转换为CustomStringConvertible
,而不是使用更方便的String(describing:)
.
如果您不知道该初始值设定项,则强制转换(或使用泛型约束)确实是很自然的事情。
现在,为什么他们最终从评论中删除了"因此"逻辑链接?也许这只是重写的副作用,或者他们觉得事情没有那么简单,这意味着我们仍然没有答案。