swift 理解Apple的文档(相同的初始化4次)

gblwokeq  于 2023-10-15  发布在  Swift
关注(0)|答案(3)|浏览(93)

我真的试图进入自定义阅读苹果的官方文档。但老实说:我拿不到东西。

这里有什么区别'字符串init(描述:受试者“?

来源:Apple documentation - String

bfnvny8b

bfnvny8b1#

尽管共享相同的名称,但这些重载中的每一个对其泛型和关联类型都有不同的约束,但是Apple文档页面上的摘要部分并不显示这些约束,因此视觉上存在歧义。
但是如果你按照每个链接到他们自己的页面,你会看到约束是如何不同的:

  • First . init<Subject>(describing instance: Subject) where Subject : TextOutputStreamable
  • Second . init<Subject>(describing instance: Subject) where Subject : CustomStringConvertible
  • Third . init<Subject>(describing instance: Subject) where Subject : CustomStringConvertible, Subject : TextOutputStreamable
  • Forth . init<Subject>(describing instance: Subject)
  • Fifth . init<Subject>(reflecting subject: Subject)
x7yiwoj4

x7yiwoj42#

细节页面讨论了差异。
https://developer.apple.com/documentation/swift/string/init(describing:)-67ncf
初始化器以下列方式之一创建instance的字符串表示,具体取决于其协议一致性:
如果instance符合TextOutputStreamable协议,则通过调用instance.write(to:s)在空字符串s上。
如果instance符合CustomStringConvertible协议,则结果为instance.example。
如果instance符合CustomSlogStringConvertible协议,则结果为instance.debugDescription。
一个未指定的结果由Swift标准库自动提供。
如果键入

String(describing

在Xcode和“跳转到定义”中,您将看到它们是如何定义的。

public init<Subject>(describing instance: Subject)

@inlinable public init<Subject>(describing instance: Subject) where Subject : CustomStringConvertible

@inlinable public init<Subject>(describing instance: Subject) where Subject : TextOutputStreamable

@inlinable public init<Subject>(describing instance: Subject) where Subject : CustomStringConvertible, Subject : TextOutputStreamable

where之后的部分与文档中的描述相匹配。

kqqjbcuj

kqqjbcuj3#

这是由于协议一致性和初始化程序过载。
init<Subject>(describing instance: Subject) where Subject : TextOutputStreamable
init<Subject>(describing instance: Subject) where Subject : CustomStringConvertible
init<Subject>(describing instance: Subject) where Subject : CustomStringConvertible, Subject : TextOutputStreamable
init<Subject>(describing instance: Subject)
单击到初始化器的定义,会给出以下信息,解释每个初始化器的作用。
使用此初始化器将任何类型的示例转换为其首选的String示例表示。初始化器以下列方式之一创建instance的字符串表示,具体取决于其协议一致性:
如果instance符合TextOutputStreamable协议,则通过调用instance.write(to:s)在空字符串s上。
如果instance符合CustomStringConvertible协议,则结果为instance.example。
如果instance符合CustomSlogStringConvertible协议,则结果为instance.debugDescription。
一个未指定的结果由Swift标准库自动提供。
例如,此自定义Point结构使用标准库提供的默认表示。

相关问题