当编写protocol和针对protocol进行扩展时,Self(大写S)和self(小写S)之间存在差异。
当与大写S一起使用时,Self指的是符合协议的类型,例如String或Int。
当与小写S一起使用时,self指的是该类型内的值,例如“hello”或556。
例如,请考虑以下扩展BinaryInteger:
extension BinaryInteger { func squared() -> Self { return self * self }
记住,Self大写字母S指的是符合协议的任何类型。在上面的例子中,Int符合BinaryInteger,所以在调用Int方法时返回一个Int。
在另一方面,self用小写小号是指任何值的类型成立。如果在Int存储值5时调用上面的示例,则实际上是这样5 * 5。
注意:“Self”仅在协议中可用,或者作为类中方法的结果