Swift协议中AssociatedType与Self.AssociatedType的区别是什么?
两个
SomeProtocol协议的区别分析 先明确两个协议的代码:
第一个协议:
protocol SomeProtocol { associatedtype Item: SomeOtherProtocol var itemValue: Item { get } }
第二个协议:
protocol SomeProtocol { associatedtype Item: SomeOtherProtocol var itemValue: Self.Item { get } }
核心结论
这两个协议没有任何实际区别,是完全等价的写法。
具体解释
在Swift协议的内部上下文里,直接引用关联类型Item和通过Self.Item引用,效果完全一致。因为Item是当前协议SomeProtocol定义的关联类型,协议内部的成员声明中,Item本身就默认指代当前遵循协议的类型(Self)所对应的关联类型,所以两种写法只是语法形式不同,编译器会将它们视为同一个声明。
无论是哪种写法,当你让某个类型遵循SomeProtocol时,只需要指定符合SomeOtherProtocol要求的Item关联类型,并提供对应类型的itemValue属性即可,实现逻辑和约束没有任何差异。
内容的提问来源于stack exchange,提问作者Diego Perdomo
相关产品推荐
相关产品推荐

