swift'self'和'Self'有什么区别?

时间:2015-12-03 03:04:49

标签: swift

my question

问题:'自我'和'自我'有什么区别?如何在函数实现中使用“Self”当我在超类中定义函数以返回子类的类型时?

我应该代表函数调用者的自我类型返回什么类型?是否是基类型NSObject?

2 个答案:

答案 0 :(得分:4)

在编写协议和协议扩展时, Self (大写S)和 self (小写S)之间是有区别的。与大写字母S一起使用时,是指符合协议的类型,例如StringInt。当与小写字母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编程语言中的协议关联类型声明。令人惊讶的是,未在协议或嵌套类型的章节中记录。“

此外:https://forums.developer.apple.com/thread/5479

相关问题