2016-09-03 11 views
12

द्वारा स्ट्रिंग एनम तक पहुंचने के लिए मेरे पास सी में एक enum है और इंडेक्स को स्ट्रिंग द्वारा प्रतिनिधित्व करने की आवश्यकता है।इंडेक्स

स्ट्रिंग प्रकार का स्विफ्ट एनम इंटीजर इंडेक्स द्वारा कैसे उपयोग किया जा सकता है?

मैं एनम को स्विफ्ट में कॉपी करना चाहता हूं, टाइप को स्ट्रिंग में सेट करना चाहता हूं और टेक्स्ट को प्रदर्शित करने के लिए सभी कच्चे मानों को परिभाषित करना चाहता हूं, और फिर स्विफ्ट स्ट्रिंग एनम के लिए कच्चे मूल्य टेक्स्ट निकालने के लिए सी एनम वैल्यू का उपयोग करना चाहता हूं।

अन्यथा मैं केवल तारों की एक सरणी बनाउंगा .. लेकिन enum अधिक उपयोगी होगा।

उत्तर

22

स्विफ्ट में, एनम प्रकारों में मामलों की सूचकांक जानकारी नहीं होती है (कम से कम, प्रोग्रामर के लिए प्रदान नहीं की जाती है)।

तो:

कैसे स्ट्रिंग प्रकार का एक स्विफ्ट enum पूर्णांक सूचकांक द्वारा इस्तेमाल किया जा सकता है?

उत्तर "आप नहीं कर सकते"।


आप Int (या enum मामले) और कई से सिर्फ तार की एक सरणी बनाने के अन्य तरीकों से String मूल्यों ..

उदाहरण के लिए, यदि आपके बाध्य स्ट्रिंग्स के रूप में ही हो सकता है बाध्य कर सकते हैं मामले लेबल, आप कुछ इस तरह लिख सकते हैं:

enum MyEnum: Int { 
    case foo 
    case bar 
    case baz 

    var string: String { 
     return String(self) 
    } 
} 

if let value = MyEnum(rawValue: 0) { 
    print(value.string) //->foo 
} 

अपने स्ट्रिंग्स थोड़ा और पाठ प्रदर्शित करने के लिए जटिल होने की जरूरत है, तो आप हमें कर सकते हैं ई स्विफ्ट Dictionary enum मामलों और स्ट्रिंग्स बांधने के लिए।

enum AnotherEnum: Int { 
    case foo 
    case bar 
    case baz 

    static let mapper: [AnotherEnum: String] = [ 
     .foo: "FooString", 
     .bar: "BarString", 
     .baz: "BazString" 
    ] 
    var string: String { 
     return AnotherEnum.mapper[self]! 
    } 
} 

if let value = AnotherEnum(rawValue: 1) { 
    print(value.string) //->BarString 
} 
थोड़ा और अधिक तार
का एक सरल सरणी से पठनीय

+0

बहुत अच्छा, धन्यवाद :) – jarryd

4

सरल वर्कअराउंड जो भी उपयोगी है यदि आप स्ट्रिंग एनम को गिनना चाहते हैं।

enum MyEnum: String { 
    case foo = "fooString" 
    case bar = "barString" 
    case baz = "bazString" 

    static let allValues = [foo, bar, baz] //must maintain second copy of values 
} 

//enumeration advantage 
for value in MyEnum.allValues { 
    print(value) 
} 

//get value by index 
let value = MyEnum.allValues[1] 

print(value) //barString 
+0

पूरी तरह से शानदार, धन्यवाद। मुझे संदेह है कि यह इसे भाषा में ही बना देगा। बेशक, इसका उपयोग करने के लिए एक पूर्व-मौजूदा पद्धति नहीं है .. –