19
votes

Note: I want to achieve similar functionality in swift - Where to store global constants in an iOS application?

I have two classes - MasterViewController and DetailViewController

I want to define an enum (refer below enum) and use its values in both classes:

enum Planet: Int {
    case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}

I tried to define it in MasterViewController and use it in DetailViewController like this:

let aPlanet = Planet.Earth

but compiler is complaining :(

"Use of unresolved identifier Planet"

Generally in my objective c code I used to have a global constant file, which I used to import in app-prefix.pch file, which was making it accessible to all files within my project, but in this case I am clueless.

2
Are you sure your enum file is being compiled? This code works for me.drewag
yeah.. cross verified, can you share your sample code may be I am missing some minor thing.Devarshi
I literally but your first block of code into one file and the second block of code into another file in the same project and it compiled fine.drewag
Is your enum being defined within another block, perhaps a class?drewag
gotcha.. you caught my mistake, thnx :)Devarshi

2 Answers

29
votes

If your enum is being defined in a class like this:

class MyClass {
    enum Planet: Int {
        // ...
    }
}

You have to access it through your class:

var aPlanet = MyClass.Planet.Earth

You also want to use the rawValue property. You will need that to access the actual Int value:

var aPlanet = MyClass.Planet.Earth.rawValue
22
votes

In swift you can declare an enum, variable or function outside of any class or function and it will be available in all your classes (globally)(without the need to import a specific file).