
问:“Self”和“Self”有什么区别?当我在超类中定义一个函数来返回子类的类型时,如何在函数实现中使用"Self“?
我应该代表函数调用者的自身类型返回什么类型?基类型是不是NSObject?
发布于 2018-09-01 16:06:19
在编写协议和协议扩展时,Self (大写S)和self (小写S)是有区别的。当与大写S一起使用时,Self是指符合协议的类型,例如String或Int。当与小写的S一起使用时,self指的是该类型中的值,例如“hello Swift”或786。
例如,考虑BinaryInteger上的这个扩展
extension BinaryInteger {
func squared() -> Self {
return self * self
}
}请记住,带有大写S的Self指的是符合协议的任何类型。在上面的示例中,Int符合BinaryInteger,因此当在Int上调用时,该方法实际上读取了以下内容:
func squared() -> Int {
return self * self
}另一方面,带有小写字母S的self指的是该类型包含的任何值。如果在存储值8的Int上调用上面的示例,那么实际上是这样的:
func squared() -> Int {
return 8 * 8
}发布于 2015-12-03 22:19:41
您应该使用self,而不是Self。
另外,正如其他人所指出的,可以尝试self.dynamicType。
此外,我建议你在谷歌上搜索“如何检查Swift类型”。
希望这能有所帮助:)
引用此链接:Distinction in Swift between uppercase "Self" and lowercase "self"
Self指的是协议中当前“对象”的类型(任何符合该协议的内容)。有关其用法的示例,请参阅返回Self的协议函数。
我为Self找到的唯一官方文档是Swift编程语言中的协议关联类型声明。令人惊讶的是,在有关协议或嵌套类型的部分中没有对其进行记录。“
https://stackoverflow.com/questions/34057130
复制相似问题