为什么不鼓励访问CustomStringConvertible的描述



苹果的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:).
如果您不知道该初始值设定项,则强制转换(或使用泛型约束)确实是很自然的事情。

现在,为什么他们最终从评论中删除了"因此"逻辑链接?也许这只是重写的副作用,或者他们觉得事情没有那么简单,这意味着我们仍然没有答案。

相关内容

  • 没有找到相关文章

最新更新