2017-02-08 7 views
1

Я хочу поставить мой массив значений в случае моего переключателя заявлениеПереключить оператор, где значение Int, но случай может содержать массив

У меня есть массив значений сказать

let intValues = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 .... 100] 

и я хочу использовать оператор switch, который будет использоваться в качестве инструмента сравнения.

let inputValue = 30 // or some other int value 
switch inputValue { 
case 101: 
    // do something lol 

/* =============================== */ 
case intValues: // 
    // do something more: 
/* =============================== */ 

case 13131: 
    // do another thing 
default: 
    // do default 
} 

Я знаю, что могу сделать это легко либо делать это case 1, 2, 3, 4, 5, и так далее, или используя если оператор так:

if intValues.contains(inputValue) { 
    // do something more: 
} else if inputValue == 101 { 
    // do something lol 
} else if inputValue == 13131 { 
    // do another thing 
} else { 
    // do default 
} 

или делать somethig как

if intValues.contains(inputValue) { 
    // do something more: 
} else { 
    switch inputValue { 
    case 101: 
     // do something lol 
    case 13131: 
     // do another thing 
    default: 
     // do default 
    } 
} 

и наоборот

Но это возможно хотя? сделать это только с помощью оператора switch?

ответ

3

Вы можете использовать case let с where.

let intValues = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 
let inputValue = 30 // or some other int value 
switch inputValue { 
    case let x where intValues.contains(x): 
     // do something more: 
    case 101: 
     // do something lol 
    case 13131: 
     // do another thing  
    default: 
     // do default 
} 
+0

охладиться это было то, что я искал –

+0

@ZonilyJame Добро пожаловать мат :) –

1

Вы должны просто использовать счетную замкнутую область в ваших случаях включения:

let inputValue = 30 
switch inputValue { 
case 1...10: 
    print(1...10) 
case 11...20: 
    print(11...20) 
case 21...100: 
    print(21...100) // "21...100\n" 
default: 
    print("default") 
} 
+0

, кажется, все в порядке, но если бы я, чтобы иметь массив, не используя диапазоны это не будет работать. –

+1

@ ZonilyJame мой ответ был основан на примере вашего массива от 1 ... 100, поэтому я думал, что вы хотите переключить его на основе диапазона. –

1

Вы можете сделать это с помощью оператора диапазона.

let inputValue = 30 
    switch value { 
    case 1...100: 
    print("between hundred") 
    case 101: 
    print("it's 101") 
    default: 
    print("outer value") 
}