为什么“self.self”可以快速编译和运行?

Nik*_*tin 7 oop instance-variables self swift

昨天我在 Swift 中查看了一段代码,其中包括这一行:

self.self.someProperty
Run Code Online (Sandbox Code Playgroud)

这让我感到惊讶,因为self一词被保留并用作对当前实例的引用。

起初我用其他语言检查了这种现象,但都出错了。这并不奇怪 - 但是,为什么它会在 swift 中编译和运行?

其次,我在互联网上搜索了有关此内容的信息,但没有找到任何相关内容...

编辑 我从我的支票中复制了这一点:

self.someProperty//exactly the same as:
self.self.someProperty//or as:
self.self.self.self.self.someProperty
Run Code Online (Sandbox Code Playgroud)

Swift 文档给出了一些解释:

类型的每个实例都有一个称为 self 的隐式属性,它完全等同于实例本身

这很好,部分有用,但我认为它仍然不够

所以我问:

  1. 为什么有效?
  2. 这背后有什么有用的逻辑吗?

mat*_*att 6

这是因为.self对象的属性就是该对象本身。所以你的第二个self没有改变。

事实上,你可以无限期地延长这个游戏(或者只要你有耐心):

let s = "Hello".self.self.self.self.self.self.self.self
// s is still simply "Hello"
Run Code Online (Sandbox Code Playgroud)

  • 是的。过于自私没有任何好处。 (8认同)

fi1*_*i12 5

是的,无论你在字符串后有多少 .self ,它仍然只是它自己