Access static variables within class in Swift

Solution 1:

There are two ways to access a static property/method from a non-static property/method:

  1. As stated in your question, you can prefix the property/method name with that of the type:

    class MyClass {
        static let staticProperty = 0
    
        func method() {
            print(MyClass.staticProperty)
        }
    }
    
  2. Swift 2: You can use dynamicType:

    class MyClass {
        static let staticProperty = 0
    
        func method() {
            print(self.dynamicType.staticProperty)
        }
    }
    

    Swift 3: You can use type(of:) (thanks @Sea Coast of Tibet):

    class MyClass {
        static let staticProperty = 0
    
        func method() {
            print(type(of: self).staticProperty)
        }
    }
    

If you're inside a static property/method you do not need to prefix the static property/method with anything:

class MyClass {
    static let staticProperty = 0

    static func staticMethod() {
        print(staticProperty)
    }
}

Solution 2:

This is solved elegantly in Swift 5.1 you can access it via

Self.yourConstant

Reference: https://github.com/apple/swift-evolution/blob/master/proposals/0068-universal-self.md

Solution 3:

There is a way in Swift to make Marcel's answer satisfy even most picky style-guide gods

class MyClass {

    private typealias `Self` = MyClass

    static let MyConst = 5

    func printConst() {
        print(Self.MyConst)
    }
}

That makes Self available like in protocols when you want access associated type declaration. I am not sure about Swift 1 because never tried it but in Swift 2 it works perfectly

Solution 4:

In a future Swift 3 version (yet to be released) you can use Self (yes, that's with a capital) to reference to the containing class. A proposal for this was accepted, but the feature is not implemented yet.

For example:

struct CustomStruct {          
 static func staticMethod() { ... } 

 func instanceMethod() {          
   Self.staticMethod() // in the body of the type          
 }          
}

Source: https://github.com/apple/swift-evolution/blob/master/proposals/0068-universal-self.md