Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?
like image 958
Nikita Kurtin Avatar asked Dec 28 '15 19:12

Nikita Kurtin


1 Answers

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"
like image 173
matt Avatar answered Sep 22 '22 21:09

matt