2015-03-29 14 views
12

Utworzyłem struct z innej struktury zagnieżdżone wewnątrz niej tak:Jak uzyskać dostęp do struct zagnieżdżony wewnątrz struktury

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] 
    } 
} 

myślałem, że będę w stanie zająć się „odcień” poz tak:

aTheme.color.tint 

Ale aTheme nie posiada człon "color".

Jak mogę to uzyskać? Czy to po prostu nie jest i powinienem użyć innej struktury?

Odpowiedz

11

Co utworzeniu jest typ zagnieżdżony - color jest zadeklarowana jako rodzaj wewnętrznej typu Theme, tak aby utworzyć wystąpienie color byłoby użyć tej notacji:

let myColor = Theme.color(...) 

Myślę, że zamiast tego chcesz, aby właściwość instancji Theme była instancją color . Do tego nie trzeba rodzaje być zagnieżdżone:

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 
} 

Uwaga: Rodzaje należy zawsze zadeklarowana z początkowych czapki.

+0

Ach, doskonale, to ma sens. Oczywiście Theme nie zna Koloru, ponieważ w zasadzie nikt tego nie robi. –

3

może tak?

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] 
} 

następnie aTheme.color.tint

+0

Tylko włosy wolniej. Dziękuję za tę samą poprawną odpowiedź. –

5

Updated: z Swift 3.1 można użyć typu zagnieżdżonego z Struct.

+1

I jakie to jest błogosławieństwo! Możemy teraz robić to, co chce OP. To świetnie nadaje się do organizacji kodu, przejrzystości, enkapsulacji. – Womble

+0

Dwa lata, odkąd zadałem pytanie. Woot! Ma to dla mnie taki sens, że trudno zrozumieć, dlaczego nie zawsze tak było. –