2016-09-06 37 views
5

Có cách nào đơn giản để lặp qua tất cả các thuộc tính của cấu trúc không? Cách tiếp cận cho các thuộc tính không tĩnh mà tôi quen thuộc là sử dụng Mirror, nhưng điều này trả về một mảng trống khi cấu trúc chỉ chứa các thuộc tính tĩnh. Dưới đây là ví dụ về những gì tôi đang cố gắng đạt được:Lặp lại các thuộc tính tĩnh của một cấu trúc

struct Tree { 
    static let bark = "Bark" 
    static let roots = "Roots" 
} 

let treeParts = [String]() 
// insert code here to make treeParts = ["Bark", "Roots"] 
+0

Tôi chưa thử điều này, nhưng bạn có đang phản chiếu một _instance_ của cấu trúc hoặc kiểu dữ liệu không? Tôi nghĩ rằng để có được các thuộc tính tĩnh, bạn sẽ phải nhân bản 'Tree.type'. –

+0

Không chắc chắn những gì bạn có ý nghĩa của .type, cấu trúc của tôi không có tài sản đó, nhưng tôi đã thử nó với .self và tôi đã không nhận được bất cứ điều gì. – mattgabor

+0

Xin lỗi, đúng, nên nói 'Tree.self' (tôi đã nghĩ về vốn-T" Type, nhưng đó là tên máy in, không phải là đối tượng metatype) Quá xấu mà không hoạt động. –

Trả lời

0

Vì tôi cũng quan tâm đến cách thực hiện điều này, tôi đã làm ví dụ bên dưới. Tại sao không chỉ tạo cấu trúc với các thuộc tính không tĩnh cộng với một biến cá thể tĩnh làm cho cấu trúc trở thành một singleton. Mẫu mã sau đây mô tả chi tiết một trường hợp sử dụng ví dụ để ánh xạ các giá trị của một đối tượng Person tới một từ điển JSON bằng cách sử dụng các ngữ nghĩa đặt tên của REST API. Tên thuộc tính của PersonJSONKeys phải khớp với tên thuộc tính của Person.

Mã cho hàm allProperties() xuất phát từ How to loop over struct properties in Swift?. Bạn có thể sửa đổi chức năng này một cách dễ dàng để chỉ trả về các giá trị của một thuộc tính cấu trúc.

Vì cấu trúc bây giờ là một singleton tất cả các thuộc tính của nó sẽ được khởi tạo chỉ một lần và an toàn luồng được đưa ra bởi biến cá thể tĩnh của nó.

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