2016-09-06 10 views
5

क्या संरचना के सभी गुणों को फिर से शुरू करने का कोई आसान तरीका है? गैर-स्थैतिक गुणों के लिए दृष्टिकोण जो मैं परिचित हूं Mirror का उपयोग कर रहा है, लेकिन संरचना में केवल स्थिर गुण होने पर यह एक खाली सरणी देता है। यहाँ मैं क्या हासिल करना कोशिश कर रहा हूँ का एक उदाहरण है:एक संरचना के स्थिर गुणों पर इटरेट

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

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

मैंने यह कोशिश नहीं की है, लेकिन क्या आप संरचना के _instance_ को मिरर कर रहे हैं, या मेटाटाइप? मुझे लगता है कि स्थिर गुण प्राप्त करने के लिए आपको 'Tree.type' दर्पण करना होगा। –

+0

सुनिश्चित नहीं है कि आपका क्या मतलब है। टाइप, मेरी संरचना में उस संपत्ति नहीं है, लेकिन मैंने इसे आजमाया। मुझे और मुझे कुछ भी नहीं मिला। – mattgabor

+0

क्षमा करें, ठीक है, 'Tree.self' कहा जाना चाहिए था (मैं पूंजी-टी "प्रकार के बारे में सोच रहा था, लेकिन यह टाइपनाम है, मेटाटाइप ऑब्जेक्ट नहीं)। बहुत बुरा है जो काम नहीं करता है। –

उत्तर

0

के बाद से मैं भी इस मैं नीचे दिए गए उदाहरण बना कैसे करना है की दिलचस्पी होती है। न केवल स्थिर स्थैतिक गुणों के साथ संरचना बनाएं और एक स्थिर आवृत्ति चर जो संरचना को सिंगलटन बनाता है। निम्न कोड नमूना एक उदाहरण का उपयोग उदाहरण के लिए Person ऑब्जेक्ट के मैपिंग मानों के लिए एक JSON शब्दकोष को आरईएसटी एपीआई के नामकरण अर्थशास्त्र का उपयोग कर विवरण का उपयोग करता है। PersonJSONKeys के गुणों के नाम Person के संपत्ति नामों से मेल खाते हैं।

allProperties() फ़ंक्शन के लिए कोड How to loop over struct properties in Swift? से आता है। आप इस फ़ंक्शन को आसानी से केवल structs गुणों के मानों को वापस करने के लिए संशोधित कर सकते हैं।

struct PersonJSONKeys: PropertyLoopable { 
    static let instance: PersonJSONKeys = PersonJSONKeys() 
    private init() {} 

    let name = "name" 
    let firstName = "first_name" 
    let age = "age" 
} 

struct Person: PropertyLoopable { 
    let name = "Doe" 
    let firstName = "John" 
    let age = "18" 
} 

let person = Person() 
let personProperties = person.allProperties() 
var personJSON: [String:Any] = [:] 

for jsonProperty in PersonJSONKeys.instance.allProperties() { 
    let propertyName = jsonProperty.key 
    let jsonKey = jsonProperty.value as! String 
    personJSON[jsonKey] = personProperties[propertyName] 
} 

Struct के बाद से अब एक सिंगलटन उसके गुण के सभी केवल एक बार initialised हो जाएगा और धागा सुरक्षा अपने स्थिर उदाहरण चर द्वारा दिया जाता है।

संबंधित मुद्दे