问题:'自我'和'自我'有什么区别?如何在函数实现中使用“Self”当我在超类中定义函数以返回子类的类型时?
我应该代表函数调用者的自我类型返回什么类型?是否是基类型NSObject?
答案 0 :(得分:4)
在编写协议和协议扩展时, Self (大写S)和 self (小写S)之间是有区别的。与大写字母S一起使用时,自是指符合协议的类型,例如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
}
答案 1 :(得分:0)
您应该使用self
,而不是Self
。
此外,正如其他人所说,请尝试self.dynamicType
。
此外,我建议你谷歌“如何检查Swift类型”谷歌。
希望有所帮助:)
从此链接引用:Distinction in Swift between uppercase "Self" and lowercase "self"
“Self指的是协议内部当前”thing“的类型(符合协议)。有关其使用的示例,请参阅Protocol func returns Self。
我在Self中找到的唯一官方文档是Swift编程语言中的协议关联类型声明。令人惊讶的是,未在协议或嵌套类型的章节中记录。“