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

Phi*_*rin 6 string swift option-type customstringconvertible

Apple\xe2\x80\x99s 文档CustomStringConvertible

\n\n
\n

description不鼓励直接访问 type\xe2\x80\x99s属性 [\xe2\x80\xa6]。

\n
\n\n

为什么?

\n\n
\n\n

下面是一个示例,其中 usingdescription对我来说似乎很有用。否则我如何得到相同的结果?

\n\n
func dontPrintNil(_ s: String?) {\n   if s == nil {\n        print("placeholder")\n    } else {\n        print(s!)\n    }\n}\n\nlet s: String? = nil\n\ndontPrintNil(s)                          // \xe2\x86\x92 placeholder\ndontPrintNil(s?.description)             // \xe2\x86\x92 placeholder\ndontPrintNil(String(describing: s))      // \xe2\x86\x92 nil\ndontPrintNil("\\(s)")                     // \xe2\x86\x92 nil\n
Run Code Online (Sandbox Code Playgroud)\n

Cyk*_*ero 1

作为提示,同一文档的先前版本如下:

\n
\n

注意:String(instance)适用于任何instance类型的,如果恰好是 ,则返回它。用作通用约束,或访问一致的类型descriptioninstanceCustomStringConvertibleCustomStringConvertibledescription因此,不鼓励

\n
\n

对我来说,这表明他们担心的是人们不必要地不遗余力地将值转换CustomStringConvertible,而不是使用更方便的String(describing:)
\n如果您不了解该初始值设定项,则强制转换(或使用通用约束)确实是自然而然的事情。

\n

现在\xe2\x80\x94为什么他们最终从注释中删除\xe2\x80\x9ctherefore\xe2\x80\x9d逻辑链接?也许这只是重写的副作用,或者也许他们觉得事情没那么简单,这意味着我们仍然没有答案。

\n