使用OC开发时大家都知道有一个self关键字,但Swift还有个Self关键字,看它第一个字母是大写的,大家应该能猜到应该是和类或者类型相关,今天我们就来探究一下它的作用。
这段代码里有self和Self,self指向类对象;Self只能作为函数关键字,setValue函数的返回值是ClassA类型。
这段代码中,可以看到在Struct中使用Self关键字,编译器报错,提示我们结构体不支持Self关键字!
Self关键字只能用在类或者协议里,作为函数返回值类型,表示当前类。
这也就解释了为什么当我们想要在协议扩展中使用where子句进行条件限定的时候,Self后匹配条件只能是类。如果是结构体的话,编译器就会报错。
PS:如果想在协议扩展的where子句中做结构体的类型限定,可以在协议中使用关联类型