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

lis*_*our 1 swift

在此处输入图片说明

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

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

Rav*_*ati 10

在编写协议和协议扩展时,Self(大写 S)和self(小写 S)之间是有区别的。当与大写 S 一起使用时,Self指的是符合协议的类型,例如StringInt。当与小写 S 一起使用时, self 指的是该类型中的值,例如“hello Swift”786

例如,请考虑以下扩展名BinaryInteger

extension BinaryInteger {
    func squared() -> Self {
        return self * self
    }
}
Run Code Online (Sandbox Code Playgroud)

请记住,带有大写 S 的Self指的是符合协议的任何类型。在上面的例子中,Int符合BinaryInteger,所以当调用Int该方法时,有效地读取:

func squared() -> Int {
    return self * self
}
Run Code Online (Sandbox Code Playgroud)

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

func squared() -> Int {
    return 8 * 8
}
Run Code Online (Sandbox Code Playgroud)