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
}
另一方面,用小写字母self指代类型所持有的任何值。如果在一个存储值为8的Int
上调用上面的示例,它将有效地是这样的:
func squared() -> Int {
return 8 * 8
}
你应该使用self
,而不是Self
。
另外,正如其他人所指出的,尝试使用self.dynamicType
。
此外,我建议你在谷歌上搜索“如何检查Swift类型”。
希望这有所帮助 :)
引用自此链接:Swift中大写“Self”和小写“self”的区别
“Self指的是协议内部当前‘thing’的类型(任何符合协议的内容)。关于它的使用示例,请参见Protocol func returning Self。
我找到的唯一官方文档是在The Swift Programming Language的Protocol Associated Type Declaration中。令人惊讶的是,在协议或嵌套类型的章节中没有记录它。”
Self
仅用于泛型约束。您可能想要使用self.dynamicType
。 - fluidsonicself.dynamicType.init()
的东西。但是你只能调用被标记为required
的初始化方法。 - fluidsonic