2015-03-29 20 views
12

tôi đã tạo ra một cấu trúc với một struct lồng bên trong của nó, như thế này:Làm thế nào để truy cập vào một struct lồng vào bên trong một cấu trúc

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

tôi nghĩ rằng tôi muốn có thể để giải quyết các "màu" mục như sau:

aTheme.color.tint 

Nhưng aTheme không có thành viên "color".

Làm cách nào để nhận được thông báo? Hoặc là điều này chỉ là không-đi và tôi nên sử dụng một cấu trúc khác nhau?

Trả lời

11

gì bạn đã tạo là một loại lồng nhau - color được khai báo là một loại bên trong loại Theme, vì vậy để tạo ra một thể hiện của color bạn sẽ sử dụng ký hiệu này:

let myColor = Theme.color(...) 

Tôi nghĩ thay vào đó bạn muốn có một thuộc tính của một cá thể Theme là một ví dụ color . Đối với điều này, bạn không cần các loại lồng nhau:

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 
} 

Lưu ý: Các loại phải luôn được khai báo với mũ ban đầu.

+0

Ah, hoàn hảo, điều đó rất có ý nghĩa. Tất nhiên Theme không biết về màu sắc, vì về cơ bản không ai làm. –

3

có thể như thế này?

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

sau đó aTheme.color.tint

+0

Chỉ cần tóc chậm hơn. Cảm ơn bạn cho cùng một câu trả lời đúng. –

5

Cập nhật: với Swift 3.1 bạn có thể sử dụng kiểu lồng nhau với Struct.

+1

Và đó là một phước lành! Bây giờ chúng ta có thể làm những gì OP muốn. Điều này là rất tốt cho tổ chức mã, rõ ràng, đóng gói. – Womble

+0

Hai năm kể từ khi tôi đặt câu hỏi. Woot! Nó có ý nghĩa rất nhiều đối với tôi, thật khó để hiểu tại sao nó không phải lúc nào cũng như vậy. –

Các vấn đề liên quan