2015-03-29 6 views
12

ho creato una struttura con un altro struct nidificato all'interno di esso, in questo modo:Come si accede una struct nidificato all'interno di una struct

struct Theme { 
    var ID: Int 
    var name: String 
    struct color { 
     var tint: String 
     var tintDisabled: String 
     var accent: String 
     var background: String 
     var items: [String] 
    } 
} 

ho pensato di essere in grado di affrontare la "tinta" oggetto simile a questo:

aTheme.color.tint 

Ma aTheme non hai membro "color".

Come posso arrivarci? O è solo un no-go e dovrei usare una struttura diversa?

risposta

11

Quello che hai creato è un tipo nidificato - color è dichiarato come un tipo all'interno del tipo Theme, in modo da creare un'istanza di color si usa questa notazione:

let myColor = Theme.color(...) 

Penso invece si desidera una proprietà di un'istanza Theme di essere un'istanza color . Per questo non è necessario per i tipi di essere annidate:

struct Color { 
    var tint: String 
    var tintDisabled: String 
    var accent: String 
    var background: String 
    var items: [String] 
} 

struct Theme { 
    var ID: Int 
    var name: String 
    var color: Color 
} 

Nota: Tipi dovrebbero sempre essere dichiarati con iniziale maiuscola.

+0

Ah, perfetto, ha molto senso. Ovviamente Tema non sa di Colore, dato che praticamente nessuno lo sa. –

3

forse come questo?

struct Theme { 
    var ID: Int 
    var name: String 
    var clor = color() 
} 
struct color { 
     var tint: String 
     var tintDisabled: String 
     var accent: String 
     var background: String 
     var items: [String] 
} 

poi aTheme.color.tint

+0

Solo un pelo più lento. Grazie per la stessa risposta corretta. –

5

Aggiornato: con Swift 3.1 è possibile utilizzare tipo nidificato con Struct.

+1

E che benedizione! Ora possiamo fare ciò che l'OP vuole. Questo è ottimo per l'organizzazione del codice, la chiarezza, l'incapsulamento. – Womble

+0

Due anni da quando ho fatto la domanda. Woot! Per me è molto sensato, è difficile capire perché non è sempre stato così. –