2016-08-02 10 views
5

स्विफ्ट में निम्नलिखित करने का कोई तरीका है तो उत्सुक है।स्विफ्ट स्विच पैटर्न एरे के साथ मिलान

let foo = [1, 2, 3] 
let bar = [4, 5, 6] 

let value = 5 

switch value { 
case in foo 
    print("5 is in foo") 
case in bar 
    print("5 is in bar") 
default: 
    break 
} 

मैं समझता हूँ कि वहाँ अन्य तरीकों से मैं इस तरह के रूप case 4, 5, 6: या नहीं एक स्विच का उपयोग और इसके बजाय bar.contains(value) का उपयोग कर, लेकिन मैं एक समाधान विशेष रूप से स्विच एक सरणी के लिए मिलान पैटर्न शामिल की तलाश में हूँ इस काल्पनिक उदाहरण काम कर सकता है कर रहे हैं। धन्यवाद!

उत्तर

16

आप एक कस्टम पैटर्न मिलान ऑपरेटर निर्धारित कर सकते हैं ~= जो "पैटर्न" और एक मूल्य के रूप में एक सरणी लेता है:

func ~=<T : Equatable>(array: [T], value: T) -> Bool { 
    return array.contains(value) 
} 

let foo = [1, 2, 3] 
let bar = [4, 5, 6] 

let value = 5 

switch value { 
case foo: 
    print("\(value) is in foo") 
case bar: 
    print("\(value) is in bar") 
default: 
    break 
} 

इसी प्रकार के ऑपरेटरों को पहले से ही जैसे मौजूद अंतराल के लिए:

public func ~=<I : IntervalType>(pattern: I, value: I.Bound) -> Bool 
+1

अच्छा। इच्छा है कि मैं इसके बारे में सोचा था। – Abizern

13

कैसे के बारे में:

let foo = [1, 2, 3] 
let bar = [4, 5, 6] 

let value = 5 

switch value { 
case _ where foo.contains(value): 
    print("\(value) is in foo") 
case _ where bar.contains(value): 
    print("\(value) is in bar") 
default: 
    print("\(value) is not in foo or bar") 
} 
+0

मुझे लगता है कि यह समाधान स्वीकार किए गए उत्तर से समझना आसान है। धन्यवाद! :) –

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