2014-07-14 13 views
5

में जेनेरिक शब्दकोश मूल्य प्रकार मैं एक शब्दकोश परिवर्तनीय बनाने की कोशिश कर रहा हूं जिसका मान दो प्रकारों में से एक है। मेरे प्रयास का एक उदाहरण इस स्पष्ट करने चाहिए:स्विफ्ट

var objects: <T where T: Float, T: Bool>[String: T] 

यह एक संकलक त्रुटि है कि केवल वाक्यात्मक समारोह प्रकार सामान्य हो सकता है फेंकता है। मुझे आश्चर्य है कि यह संभव है, मैं सिर्फ सही वाक्यविन्यास नहीं जानता?

उत्तर

14

जो उपकरण आप चाहते हैं वह संबंधित डेटा के साथ एक enum है।

enum Stuff { 
    case FloatyThing(Float) 
    case BoolyThing(Bool) 
} 

let objects = ["yes!" : Stuff.BoolyThing(true), 
       "number" : Stuff.FloatyThing(1.0)] 

यह "ऑब्जेक्ट जो एक फ्लोट या बूल है" को कैप्चर करता है और बेहतर दस्तावेज़ीकरण और सुरक्षा प्रदान करता है।

डेटा अनलोड करने के लिए, आप एक स्विच बयान का उपयोग करें:

if let something = objects["yes!"] { 
    switch something { 
    case .FloatyThing(let f): println("I'm a float!", f) 
    case .BoolyThing(let b): println("Am I true?", b) 
    } 
} 

स्विच बयान के उपयोग सुनिश्चित करें कि आप सभी संभव प्रकार को कवर करता है और आप गलती से गलत प्रकार के रूप में डेटा अनलोड होने से रोकता है। बहुत अच्छा है कि संकलक आपको बहुत मदद कर सकता है।

अधिक जानकारी के लिए, स्विफ्ट प्रोग्रामिंग भाषा में "गणनाएं और संरचनाएं" देखें।

मैं भी कि यह कैसे आम समस्याओं से निपटने के लिए इस्तेमाल किया जा सकता का एक बहुत अच्छा उदाहरण के लिए एलेक्ज़ेंड्रोस सलाज़ार द्वारा Error Handling in Swift सलाह देते हैं।

+3

+1: बहुत तेज़। – Jesper

+0

आप कैसे निर्धारित करते हैं कि मूल्य किस प्रकार है, या मूल्य पर स्विच करें? – Nick

+1

कुछ और पृष्ठभूमि के साथ अपडेट किया गया। स्विफ्ट में यह एक बहुत ही शक्तिशाली विशेषता है और मुझे उम्मीद है कि यह बहुत आम है। –