为什么Identifiable协议需要引用self?

Why is it necessary to refer to self for the Identifiable protocol?

在苹果的 Identifiable 实现中

需要的函数是

associatedtype ID
var id: Self.ID { get }

为什么需要自己?那和

有什么区别
associatedtype ID
var id: ID { get }

我认为这只是 Apple 在编写文档时使用的约定。他们用 Self. 前缀编写所有关联类型。示例:1, 2, 3。这是为了清楚什么是关联类型,什么不是。如果 Identifiable.id 的声明改为这样写:

var id: ID { get }

对于以前从未使用过 SwiftUI 的人来说,不清楚 ID 是完全独立的类型、top-level 类型还是关联类型。但是,如果它说 Self.ID,那么显然 ID 是协议的关联类型。

除此之外,Self.前缀没有任何特殊意义。就像引用实例成员时的 self. 前缀一样。在大多数情况下它是可选的。就像 self. 前缀一样,您可能 需要 Self. 在某些情况下解决名称冲突,但我现在想不出。

Apple 似乎也有嵌套类型的约定 - 总是写出 OuterTypeName.InnerTypeName,而 InnerTypeName 就足够了。 Example:

var keyDecodingStrategy: JSONDecoder.KeyDecodingStrategy