2016-10-23 14 views
5

Swift2 में, आपको निम्न कोड को कुछ इसी तरह हो सकता है:स्विफ्ट 3, स्विच बयान, मामले hasPrefix

switch productIdentifier { 
    case hasSuffix("q"): 
     return "Quarterly".localized 
    case hasSuffix("m"): 
     return "Monthly".localized 
    default: 
     return "Yearly".localized 
    } 

और यह काम करेगा। स्विफ्ट 3 में, एक ही रास्ता मैं ऊपर काम कर सकते हैं:

switch productIdentifier { 
    case let x where x.hasSuffix("q"): 
     return "Quarterly".localized 
    case let x where x.hasSuffix("m"): 
     return "Monthly".localized 
    default: 
     return "Yearly".localized 
    } 

जो Swift2 संस्करण की स्पष्टता कम करने के लिए लगता है - और यह मेरे लगता है कि मैं कुछ याद कर रहा हूँ बनाता है। उपर्युक्त पाठ्यक्रम का एक साधारण संस्करण है। मैं उत्सुक हूं अगर किसी के पास इसे संभालने का बेहतर तरीका है?

+1

मैं नहीं कर सकता स्विफ्ट 2.2.1/एक्सकोड 7.3.1 पर अपना स्विफ्ट 2 कोड काम करें। क्या आप हमें वास्तव में एक कामकाजी कोड दिखा सकते हैं? – OOPer

+0

वह काम कोड था - मैंने सीधे अपने कोडबेस से लिया। हालांकि स्थानीयकरण के लिए स्ट्रिंग्स पर विस्तार जैसी कुछ चीजें आपके लिए काम नहीं करतीं क्योंकि आपके पास वह एक्सटेंशन नहीं है। – AlexK

+0

यदि आप ऐसे लापता हिस्सों को दिखा सकते हैं तो यह बेहतर होगा। आप बस भाग्यशाली थे कि आप एक छोटी अवधि में सही जवाब प्राप्त कर सकते थे, इस तरह की जानकारी की कमी से निम्न गुणवत्ता वाले उत्तरों में बाढ़ आ जाएगी। – OOPer

उत्तर

5

अगर यह किसी भी अपने उदाहरण के रूप में बाध्यकारी मान का उपयोग कर से बेहतर है मैं नहीं जानता, लेकिन इसके बजाय आप बस एक अंडरस्कोर उपयोग कर सकते हैं,

switch productIdentifier { 
case _ where productIdentifier.hasSuffix("q"): 
    return "Quarterly".localized 
case _ where productIdentifier.hasSuffix("m"): 
    return "Monthly".localized 
default: 
    return "Yearly".localized 
+0

इसकी सराहना करें। मैं बस प्रत्येक मामले पर परिवर्तनीय नाम दोहराया गलत लगता है। – AlexK

3

आप केवल उत्पाद निर्माता के अंतिम चरित्र की जांच कर रहे हैं। आप इसे इस तरह से कर सकता है:

switch productIdentifier.characters.last { 
case "q"?: 
    return "Quarterly".localized 
case "m"?: 
    return "Monthly".localized 
default: 
    return "Yearly".localized 
} 
+1

यह इस विशिष्ट समस्या का एक बेहतर समाधान है, +1 – Alexander

+3

हालांकि सार्वभौमिक नहीं है। – Alexander

+0

@AlexanderMomchliov, सहमत हुए। मैं व्यक्तिगत रूप से नहीं सोचता कि स्विफ्ट 3 सिंटैक्स अस्पष्ट है, लेकिन अगर मैं केवल अंतिम चरित्र की जांच कर रहा हूं तो मैं इस समाधान का उपयोग करूंगा। – vacawama

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