2015-09-23 9 views
16

मान लीजिए कि आप कोडकैसे एक से अधिक मान के खिलाफ एक मूल्य की तुलना करने के लिए - स्विफ्ट

if stringValue == "ab" || stringValue == "bc" || stringValue == "cd" { 
    // do something 
} 

वहाँ इस हालत को छोटा या (स्विच बयान का उपयोग किए बिना अधिमानतः) यह सुशोभित करने का कोई तरीका है करते हैं? मुझे पता है कि इस कोड काम नहीं करता:

if stringValue == ("ab" || "bc" || "cd") { 
    // do something 
} 

मैं अन्य भाषाओं के बारे में कुछ जटिल समाधान देखा है, लेकिन वे विशिष्ट और भाषा स्विफ्ट के लिए लागू नहीं लग रहे हैं। किसी भी समाधान की सराहना की जाएगी।

उत्तर

5

ऐसा नहीं है कि मैं के बारे में पता कर रहा हूँ, आप

let validStrings = Set<String>(arrayLiteral:"ab", "bc", "cd") 
if validStrings.contains(str) { 
    //do something  
} 
+0

वास्तव में अच्छा। मैं वास्तव में इस सुविधा को भूल गया था। खुशी है कि आपने मुझे याद दिलाया। यह वास्तव में अच्छा है कि आप डुप्लिकेशंस से बचने के मामले में इसे एक सेट बना रहे हैं :) एक अच्छा दिन – Korpel

15
let valuesArray = ["ab","bc","cd"] 

valuesArray.contains(str) // -> Bool 
+7

है और आप इसे इस तरह लिख सकते हैं: 'if ["ab", "bc", "cd" ]। कंटेनर (स्ट्रिंगवैल्यू) {'। – vacawama

0
if someArray.contains(object) { 
    // contains 
} else { 
    // does not contains 
    } 
यहाँ समारोह ऊपर

रिटर्न bool मूल्य है, तो आप तर्क के हिसाब से लिखना हालांकि इस तरह कुछ कर सकते हैं।

2

आप इस तरह एक्सटेंशन बना सकते हैं:

extension Equatable { 
    func oneOf(other: Self...) -> Bool { 
     return other.contains(self) 
    } 
} 

और इस तरह इसका इस्तेमाल:

if stringValue.oneOf("ab", "bc", "cd") { ... } 

impl जो मुझे बचाया के लिए क्रेडिट यह टाइपिंग: https://gist.github.com/daehn/73b6a08b062c81d8c74467c131f78b55/

0

यदि आप चाहते हैं परीक्षण करने के लिए कि String में कई मान हैं, तो आप extension सेट कर सकते हैं जैसे:

extension String: { 
func containsStrings(other: [String]) -> Bool { 
    for string in other { 
     if self.containsString(string) { 
      return true 
     } 
    } 
    return false 
} 
} 

और यह उपयोग करने के लिए:

let stringValue = "apple" 

if stringValue.containsStrings(["ab", "bc", "le"]) { 
//Do something 
} 
0

सभी एक बयान में:

if ["ab", "bc", "cd"].contains(stringValue) { 
    // do something 
} 
संबंधित मुद्दे