Access static variables within class in Swift
There are two ways to access a static property/method from a non-static property/method:
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) } }
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)
}
}
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
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