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
3条答案
按热度按时间bfnvny8b1#
尽管共享相同的名称,但这些重载中的每一个对其泛型和关联类型都有不同的约束,但是Apple文档页面上的摘要部分并不显示这些约束,因此视觉上存在歧义。
但是如果你按照每个链接到他们自己的页面,你会看到约束是如何不同的:
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)
init<Subject>(reflecting subject: Subject)
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标准库自动提供。
如果键入
在Xcode和“跳转到定义”中,您将看到它们是如何定义的。
where
之后的部分与文档中的描述相匹配。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结构使用标准库提供的默认表示。