2014-06-28 19 views
14

Dire che ho il seguente esempio:Come accedere a un enum da un'altra classe in Swift?

class ClassOne { 
    enum Color { 
     case Red 
     case Blue 
    } 

    func giveColor() -> Color { 
     return .Red 
    } 
} 

class ClassTwo { 
    let classOne = ClassOne() 
    var color: Color = classOne.giveColor() 
} 

Il compilatore si lamenta che non sa cosa Color è in ClassTwo. Come gestirò meglio questo?

risposta

24

tuo Color enumerazione è un tipo annidato - vi accede come ClassOne.Color. Inoltre, non è possibile assegnare una proprietà da un'altra nella dichiarazione in questo modo. Lasciarlo non assegnato e farlo nel init():

class ClassOne { 
    enum Color { 
     case Red 
     case Blue 
    } 

    func giveColor() -> Color { 
     return .Red 
    } 
} 

class ClassTwo { 
    let classOne = ClassOne() 
    var color: ClassOne.Color 

    init() { 
     self.color = self.classOne.giveColor() 
    } 
} 
3

Non è possibile utilizzare il valore predefinito di una proprietà nel valore predefinito di un'altra. È possibile risolvere questo problema impostando colore nel metodo init:

class ClassTwo { 
    let classOne: ClassOne = ClassOne() 
    var color: ClassOne.Color 
    init(){ 
     color = classOne.giveColor() 
    } 
} 

Dal colore è un enum all'interno di ClassOne, per il suo tipo si dovrebbe usare ClassOne.Color invece di Color.

Si potrebbe anche fare il colore di una proprietà calcolata come questo:

class ClassTwo { 
    let classOne: ClassOne = ClassOne() 
    var color: ClassOne.Color { 
    get{ 
     return classOne.giveColor() 
    } } 
} 

Nel primo esempio color è impostato come classOne.giveColor() solo quando viene inizializzato, ma nel secondo esempio classOne.giveColor() è chiamato ogni volta che si tenta di accedere color.

+1

è possibile omettere il blocco 'ottenere' se non c'è setter. var color: ClassOne.Color {return classOne.giveColor(); } – hnh

Problemi correlati