I’m going to file this one under “it makes perfect sense, but I don’t think it aids in making the code readable” – something which I’m finding is a bit of a theme with Swift.

In Swift self gets used and gets used in a way you’d expect from many other languages. So far so good. But, it seems, Self is also a thing too, and it’s different from self. Whereas self is the current instance, Self is the current type. So consider this:

class Greeting {

    class func message() -> String {

    func message() -> String {
        "Well hello there"

    func emit() {
        print( Self.message() )
        print( self.message() )


When run, the output is:

Well hello there

It makes sense that that’s the case. I actually really like the ability to use Self rather than having to use Greeting, but damn that’s really setting things up for either mistyping or misreading code. You’re going to want to hope that your development environment makes it super obvious what’s a value and what’s a type when it comes to using font choices.