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

问题描述 投票:-2回答:2

enter image description here

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

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

swift
2个回答
4
投票

当您编写协议和协议扩展时,Self(大写S)和self(小写S)之间存在差异。当与大写S一起使用时,Self指的是符合协议的类型,例如, StringInt。当与小写字母S一起使用时,self指的是该类型内的值,例如“你好斯威夫特”或786。

例如,考虑BinaryInteger上的这个扩展:

extension BinaryInteger {
    func squared() -> Self {
        return self * self
    }
}

请记住,具有大写字母S的自我指的是符合协议的任何类型。在上面的例子中,Int符合BinaryInteger,因此当调用Int时,该方法有效地读取:

func squared() -> Int {
    return self * self
}

另一方面,带小写字母S的self指的是类型所持有的任何值。如果在存储值为8的Int上调用上面的示例,则实际上是这样的:

func squared() -> Int {
    return 8 * 8
}

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

© www.soinside.com 2019 - 2024. All rights reserved.