Why 'self.self' compiles and run in swift?

2019-05-03 19:01发布

Yesterday I reviewed a piece of code in Swift which included this line:

self.self.someProperty

Which surprised me, because the word self is reserved and used as a reference to the current instance.

At first I checked for that phenomenon in other languages, but all gave errors. Which wasn't a surprise - but still, why in swift does it compile and run?

Second I searched in the internet about this and haven't found anything relevant...

Edit I reproduced that and from my checks:

self.someProperty//exactly the same as:
self.self.someProperty//or as:
self.self.self.self.self.someProperty

Swift documentation gives some sort of explanation:

Every instance of a type has an implicit property called self, which is exactly equivalent to the instance itself.

Which is good and partly helpful, but the way I see it it's still not enough

So I'm asking:

  1. Why does it work?
  2. Is there any useful logic behind this?

2条回答
再贱就再见
2楼-- · 2019-05-03 19:59

Yup, no matter how many .self's you have after a string, it's still just itself

查看更多
在下西门庆
3楼-- · 2019-05-03 20:00

It's because the .self property of an object is that object itself. So your second self changes nothing.

You could, in fact, extend this game indefinitely (or as long as your patience holds out):

let s = "Hello".self.self.self.self.self.self.self.self
// s is still simply "Hello"
查看更多
登录 后发表回答