为什么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
在苹果的 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