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:
- Why does it work?
- Is there any useful logic behind this?
Yup, no matter how many .self's you have after a string, it's still just itself
It's because the
.self
property of an object is that object itself. So your secondself
changes nothing.You could, in fact, extend this game indefinitely (or as long as your patience holds out):