Adrian M
Adrian M

Reputation: 761

Access static variable from non static method in Swift

I know that you cannot access a non static class variable from within a static context, but what about the other way around? I have the following code:

class MyClass {

    static var myArr = [String]()

    func getArr() -> [String] {
        return myArr
    }

However, when I try to compile this, I get the error MyClass does not have a member named myArr. I thought static variables were visible to both static and non static methods, so I don't know where I am going wrong.

I am on a Macbook running OS X Yosemite using Xcode 6.3.

Upvotes: 5

Views: 4968

Answers (4)

BurtK
BurtK

Reputation: 1036

In Swift3, dynamicType is deprecated. You can use type(of: )

struct SomeData {
  static let name = "TEST"
}

let data = SomeData()
let name = type(of:data).name
// it will print TEST

Upvotes: 6

Myxtic
Myxtic

Reputation: 5699

You can also use self.dynamicType:

class MyClass {

    static var myArr = [String]()

    func getArr() -> [String] {
        return self.dynamicType.myArr
    }
}

Upvotes: 2

agy
agy

Reputation: 2854

You just need to add the class name.

class MyClass {

    static var myArr = [String]()

    func getArr() -> [String] {
        return MyClass.myArr
    }

}

You could access you Array from two different ways:

MyClass().getArr()

or

MyClass.myArr

Upvotes: 2

villy393
villy393

Reputation: 3063

You need to include the class name before the variable.

class MyClass {

    static var myArr = [String]()

    func getArr() -> [String] {
        return MyClass.myArr
    }
}

Upvotes: 5

Related Questions