true
и false
. Swift поддерживает три базовых логических оператора:
true
становится false
, а false
становится true
.
let allowedEntry = false
if !allowedEntry {
print("Доступ запрещён")
}
// Выведет "Доступ запрещён"
Фраза if allowedEntry
может быть прочитана как "если не разрешён вход". Следующая строка будет выполнена, только если утверждение "вход не разрешен" истинно; что будет верным, если allowedEntry
ложно.
false
, то второе выражение никогда не будет вычислено, потому что вне зависимости от его значения нельзя сделать всё выражение истинным. Это известно как вычисление по кратчайшей траектории.
let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
print("Добро пожаловать!")
} else {
print("Доступ запрещён")
}
// Выведет "Доступ запрещён"
Этот пример демонстрирует проверку двух Булевых значений и даёт доступ, только если оба они истинны:
true
, чтобы всё выражение было верным.
let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
print("Добро пожаловать!")
} else {
print("Доступ запрещён")
}
// Печатает "Добро пожаловать!"
В примере первое значение типа Bool
(hasDoorKey) равно false
, но второе значение (knowsOverridePassword) равно true
. Так как одно значение равно true
, то и всё выражение так же вычислится в true
, и доступ будет разрешён.
let enteredDoorCode = true
let passedRetinaScan = false
let hasDoorKey = false
let knowsOverridePassword = true
if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
print("Добро пожаловать!")
} else {
print("Доступ запрещён")
}
// Печатает "Добро пожаловать!"
Этот пример использует несколько операторов && и || для создания составного выражения. Однако операторы && и || продолжают оперировать только двумя операндами, так что это просто три меньших выражения, связанных вместе. Этот пример может быть прочитан так:
enteredDoorCode
, passedRetinaScan
, hasDoorKey
первые два подвыражения будут false
. Однако известен аварийный пароль, так что всё составное выражение будет вычисляться в true
.
let enteredDoorCode = true
let passedRetinaScan = false
let hasDoorKey = false
let knowsOverridePassword = true
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
print("Добро пожаловать!")
} else {
print("Доступ запрещён")
}
// Печатает "Добро пожаловать!"
Круглые скобки делают более понятным тот факт, что первые два значения являются частью отдельного возможного утверждения в общей логике. Вывод составного выражения не изменится, но его понимание для читателя упростится. Читабельнсоть всегда предпочтительнее краткости: используйте круглые скобки там, где они могут помочь сделать понимание проще.