对于CustomStringConvertible
,Apple’s docs表示:
不鼓励直接[...]访问类型的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
1条答案
按热度按时间cidc1ykv1#
作为提示,同一文档的以前版本如下:
注:
String(instance)
适用于 any 类型的instance
,如果instance
恰好是CustomStringConvertible
,则返回其description
。因此,不鼓励使用CustomStringConvertible
作为泛型约束,或直接访问符合类型的description
。对我来说,这表明他们担心的是人们不必要地把值"转换“到
CustomStringConvertible
,而不是使用更方便的String(describing:)
。如果您不知道初始化器,则强制转换(或使用泛型约束)确实是很自然的事情。
那么,为什么他们最终删除了评论中的“因此”逻辑链接呢?也许这只是重写的副作用,也许他们觉得事情没有那么简单,这意味着我们仍然没有答案。