2015-04-04 2 views
3

Мне было интересно, есть ли гладкий способ проверки значения целого числа в диапазоне в swift., если целое число больше x, но меньше y (Swift)

У меня есть целое число, которое может быть любым числом от 0 и 1000

Я хочу написать, если заявление о «, если число находится в пределах от 300 до 700 - это сделать, и если его любое другое число - сделать что-то еще»

Я мог бы написать:

if integer > 300 { 
    if integer < 700 { 
     //do something else1 
    } 
    //do something 
} else { 
    // do something else2 

} 

Но я хочу, чтобы свести к минимуму объем кода, чтобы написать, так как„делать что-то else1“и„сделать что-то else2“, как предполагается, будет такой же

Это не кажется, что вы можете написать:

if 300 < integer < 700 { 

} else { 

} 

Я попытался с помощью

if integer == 300..<700 { 
} 

, но это не сработало. Кто-нибудь получил предложение?

+1

Вы должны действительно прочитать документацию: https: // разработчик .apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html # // apple_ref/doc/uid/TP40014097-CH6-ID76 –

+2

* «Я попытался использовать», если целое число = 300 .. <700 "* - Данный ответ показывает прямое решение, но что-то вроде этого * возможно, сравните [Можно ли использовать оператор диапазона с инструкцией if в Swift?] (Http://stackoverflow.com/questions/24893110/can-i-use-the-range-operator-with-if-statement-in-swift). –

+0

Спасибо, что указали это! Поэтому самый короткий путь - использовать, если 300 ... 700 ~ = integer {// сделать что-то} else {// сделать что-то еще} –

ответ

10

Вы попробовали?

if integer > 300 && integer < 700 { 
    // do something 
} else { 
    // do something else    
} 

Надеется, что это помогает

+1

Спасибо, это работает! Я думал, что может быть даже более короткий способ написать его, не повторяя с && и «integer», но это может быть лучшим способом. Спасибо –

+3

На самом деле я нашел более короткий путь, что Мартин R указал на Вы можете написать: если 300 ... 700 ~ = целое число { } –

+0

William +1, но использовать открытый оператор половины! –

7

Существует тип, HalfOpenInterval, которые могут быть построены с ... и имеет .contains метод:

if (301..<700).contains(integer) { 
    // etc. 
} 

Note, 301..<700 по себе будет создавать Range, у которого нет функции contains, но вывод типа Swift будет выглядеть так, что вы вызываете метод, который имеет только HalfOpenInterval, и поэтому выбирает именно тот verload.

Я упоминаю об этом только потому, что если вы хотите сохранить интервал в качестве переменной вместо того, чтобы использовать его в режиме онлайн, вам необходимо указать:

let interval = 301..<700 as HalfOpenInterval 
if interval.contains(integer) { 
    // etc. 
} 
+4

Интересно, что с Xcode 6.3 в оптимизированном режиме это также дает тот же «оптимальный» ассемблерный код, что «if integer> 300 && integer <700' или' if 300 ... 700 ~ = integer', который я только что добавил в http: //stackoverflow.com/a/24893494/1187415. –

+0

Да, очевидно, что весь стандартный библиотечный код может быть встроен (и быстрый компилятор очень хочет встроить в -O) –

+0

И как указывает Виллиан Ларсон, оператор contains может использоваться для более короткого синтаксиса в 'if 300 .. < 700 ~ = integer {' –

Смежные вопросы