if
имеет единственное if-условие. Она выполняет набор инструкций, только если условие истинно. Результат вычисления условия имеет тип Bool
.
var temperatureInFahrenheit = 30
if temperatureInFahrenheit <= 32 {
print("Это очень холодно. Советуем надеть шарф.")
}
// Выведет "Это очень холодно. Советуем надеть шарф."
В этом примере происходит проверка того, меньше ли или равна температура 32 градусам по Фаренгейту (точка замерзания воды). Если это так, то будет напечатано сообщение. В противном случае никакого сообщения не будет выведено, а выполнение кода продолжится после закрывающей фигурной скобки инструкции if
.
if
может предоставить альтернативный набор инструкций, известный как блок else
, для ситуаций, когда условие if
равно false
. Эти инструкции отделяются ключевым словом else
:
var temperatureInFahrenheit = 40
if temperatureInFahrenheit <= 32 {
print("Это очень холодно. Советуем надеть шарф.")
} else {
print("Это не так холодно. Наденьте футболку.")
}
// Выведет "Это не так холодно. Наденьте футболку."
Одна из этих веток всегда будет выполнена. Под ветвями инструкции if
понимаются различные блоки if; if-else; else. Также отдельно взятую ветвь можно считать телом инструкции if
. Так как температура возросла до 40 градусов по Фаренгейту, то больше недостаточно холодно, чтобы советовать носить шарф, так что вместо этого сработает ветка else
.
if
для задания дополнительных блоков.
var temperatureInFahrenheit = 90
if temperatureInFahrenheit <= 32 {
print("Это очень холодно. Советуем надеть шарф.")
} else if temperatureInFahrenheit >= 86 {
print("По-настоящему жарко. Не забудьте надеть солнцезащитные очки.")
} else {
print("Это не так холодно. Наденьте футболку.")
}
// Выведет "По-настоящему жарко. Не забудьте надеть солнцезащитные очки."
Здесь дополнительная инструкция if
добавлена, чтобы отвечать за конкретную температуру жары. Финальный блок остаётся, и он выведет ответ на любые температуры, которые нельзя считать слишком жаркими или слишком холодными.
else
необязателен и может быть опущен, если набор условий не имеет необходимости быть завершённым.
var temperatureInFahrenheit = 72
if temperatureInFahrenheit <= 32 {
print("Это очень холодно. Советуем надеть шарф.")
} else if temperatureInFahrenheit >= 86 {
print("По-настоящему жарко. Не забудьте надеть солнцезащитные очки.")
}
Bool
. Следующий пример выдаст ошибку времени компиляции:
let i = 1
if i {
// не скомпилируется, так как i не является логический величиной
}
Во многих других бы языках программирования этот пример бы сработал, так как всё, что не нуль, трактуется в них как истина. Это связано с тем, что для удобства лжи ставится в соответствие 0, а истине - 1, что неверно для Swift.
let i = 1
if i == 1 {
print("Я есть грут")
}
// Выведет "Я есть грут"
А вот этот пример сработает корректно. Так как используется оператор эквивалентности (==), чьё возвращаемое значение будет Булевым.
if x = y
некорректной инструкцией, Swift помогает избежать эти типы ошибок.
let x = 0, y = 1
if x = y {
print("Эта ветка никогда не будет достигнута")
}
if
:
let name = "Неймар"
if name == "Неймар" {
print("Здравствуй, Неймар!")
} else {
print("Я сожалею, \(name), но я не распознаю Вас.")
}
// Выведет "Здравствуй, Неймар!", так как name равен "Неймар"
Здесь константе name задаётся значение строки "Неймар", а так как она равна строке из условия if
, то будет выведено "Здравствуй, Неймар!".
Int
, и String
могут быть подвергнуты сравнению, что значит, что кортежи типа (Int, String)
могут быть сравнены. Напротив, значения типа Bool
нельзя сравнить, как следствие кортежи с Булевыми значениями сравнить нельзя.
(1, "zebra") < (2, "apple") // true, так как 1 меньше 2; а "apple" и "zebra" не сравнивались
(3, "apple") < (3, "bird") // true , так как 3 равно 3, а "apple" меньше чем "bird"
(4, "dog") == (4, "dog") // true , так как 4 равно 4, и "dog" равен "dog"
Так как 1 меньше 2, то (1, "zebra") определённо меньше, чем (2, "apple"), независимо от любых других значений в кортежах. Неважно, что "zebra" не меньше, чем "apple", так как сравнение уже определено первыми элементами кортежей. Однако, когда первые элементы кортежей одинаковы, их вторые элементы сравниваются - это то, что происходит на второй и третьей строках. Про сравнение строк будет рассказано позднее.