2015-07-05 14 views
15

Xcode 7B2 पर चेतावनी कभी नहीं निष्पादित किया जाएगा, मैं निम्नलिखित है:स्विफ्ट स्विच मामले: डिफ़ॉल्ट स्विफ्ट 2 कोड के साथ

एक स्विच मामले संकलक रिटर्न निम्न चेतावनी में:

Default will never be executed 

कोड:

switch(type) { 
    case .foo: 
    return "foo" 
    case .bar: 
    return "bar" 
    case .baz: 
    return "baz" 
    default: 
    return "?" 
} 

चेतावनी क्यों होगी?

उत्तर

42

मैं सिर्फ समझा क्यों:
वस्तु मैं पर "बंद" एक enum है और मेरी enum केवल 3 प्रविष्टियां हैं: .foo, .bar, baz

संकलक को लगता है कि डिफ़ॉल्ट की कोई आवश्यकता नहीं है क्योंकि enum की हर संभावना का परीक्षण किया जाता है।

+0

क्या आप अपना उत्तर सही के रूप में चिह्नित कर सकते हैं, ताकि प्रत्येक व्यक्ति देख सके कि आपके प्रश्न का उत्तर दिया गया था। – Qbyte

+0

सही समाधान। –

3

ऐसा इसलिए हो सकता है क्योंकि type 3 मामलों के साथ एक enum है और संकलक जानता है कि स्विच स्टेटमेंट संपूर्ण है इसलिए आपको सभी संभावित मामलों को संभालने के लिए default कथन की आवश्यकता नहीं है।

3

मुझे लगता है कि यह चेतावनी open-closed principle का उल्लंघन करती है। जब आप बाद में एनम मान जोड़ते हैं, तो डिफ़ॉल्ट गायब हो जाएगा, और आप भविष्यवाणी नहीं कर सकते कि आपका कोड क्या करेगा। तो आपको यह जगह भी बदलनी है। वैसे भी, स्विच() का उपयोग करके इस सिद्धांत का उल्लंघन करता है।

+3

जैसे ही आप एक और मूल्य जोड़ते हैं, आप कोड संकलित करना बंद कर देंगे। कंपाइलर प्रत्येक स्विच स्टेटमेंट पर एक त्रुटि फेंकता है जहां मामलों पर विचार किया जा रहा है। यह टिप्पणी थोड़ी देर हो चुकी है, लेकिन उम्मीद है कि अभी भी उपयोगी है। –

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