问题描述
在Apple的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
是完全独立的顶级类型还是关联的类型。但是,如果说Self.ID
,则很明显ID
是协议的关联类型。
除此之外,Self.
前缀并不表示任何特殊含义。引用实例成员时,就像self.
前缀一样。在大多数情况下,它是可选的。就像self.
前缀一样,您可能 Self.
在某些情况下需要解决名称冲突,尽管我现在想不起来。
Apple似乎也有一个嵌套类型的约定-当OuterTypeName.InnerTypeName
就足够时,总是写出InnerTypeName
。 Example:
var keyDecodingStrategy: JSONDecoder.KeyDecodingStrategy