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

vyswwuz2  于 2023-02-28  发布在  Swift
关注(0)|答案(1)|浏览(126)

对于CustomStringConvertibleApple’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
cidc1ykv

cidc1ykv1#

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

相关问题