Swift Language
Conditionals
Поиск…
Вступление
Условные выражения, включающие ключевые слова, такие как if, else if и else, предоставляют программам Swift возможность выполнять разные действия в зависимости от логического условия: True или False. В этом разделе рассматриваются использование условий Swift, логической логики и трехмерных выражений.
замечания
Дополнительные сведения об условных операторах см. В разделе Быстрый язык программирования .
Использование гвардии
Guard проверяет состояние, и если оно ложно, оно входит в ветвь. Отделения проверки проверки должны оставить свой закрывающий блок либо через return
, break
или continue
(если применимо); неспособность сделать это приводит к ошибке компилятора. Это имеет то преимущество, что, когда guard
написан, невозможно, чтобы поток продолжался случайно (как это возможно при использовании if
).
Использование охранников может помочь снизить уровень гнездования , что обычно улучшает читаемость кода.
func printNum(num: Int) {
guard num == 10 else {
print("num is not 10")
return
}
print("num is 10")
}
Guard также может проверить, есть ли значение в опции , а затем разворачивать его во внешней области:
func printOptionalNum(num: Int?) {
guard let unwrappedNum = num else {
print("num does not exist")
return
}
print(unwrappedNum)
}
Guard может объединить дополнительный развёрток и проверить состояние , используя , where
ключевое слово:
func printOptionalNum(num: Int?) {
guard let unwrappedNum = num, unwrappedNum == 10 else {
print("num does not exist or is not 10")
return
}
print(unwrappedNum)
}
Основные условные обозначения: if-statements
Оператор if
проверяет, является ли условие Bool true
:
let num = 10
if num == 10 {
// Code inside this block only executes if the condition was true.
print("num is 10")
}
let condition = num == 10 // condition's type is Bool
if condition {
print("num is 10")
}
if
утверждения принимают else if
и else
блоки, которые могут проверять альтернативные условия и предоставлять резервную копию:
let num = 10
if num < 10 { // Execute the following code if the first condition is true.
print("num is less than 10")
} else if num == 10 { // Or, if not, check the next condition...
print("num is 10")
} else { // If all else fails...
print("all other conditions were false, so num is greater than 10")
}
Основные операторы типа &&
и ||
может использоваться для нескольких условий:
Логический оператор И
let num = 10
let str = "Hi"
if num == 10 && str == "Hi" {
print("num is 10, AND str is \"Hi\"")
}
Если num == 10
было ложным, второе значение не будет оцениваться. Это называется оценкой короткого замыкания.
Логический оператор OR
if num == 10 || str == "Hi" {
print("num is 10, or str is \"Hi\")
}
Если num == 10
истинно, второе значение не будет оцениваться.
Логический оператор NOT
if !str.isEmpty {
print("str is not empty")
}
Необязательные обязательства и предложения «где»
Опционы должны быть развернуты, прежде чем их можно будет использовать в большинстве выражений. if let
является необязательной привязкой , которая преуспевает, если необязательное значение не равно nil
:
let num: Int? = 10 // or: let num: Int? = nil
if let unwrappedNum = num {
// num has type Int?; unwrappedNum has type Int
print("num was not nil: \(unwrappedNum + 1)")
} else {
print("num was nil")
}
Вы можете повторно использовать одно и то же имя для новой связанной переменной, затеняя оригинал:
// num originally has type Int?
if let num = num {
// num has type Int inside this block
}
Объедините несколько необязательных привязок с запятыми ( ,
):
if let unwrappedNum = num, let unwrappedStr = str {
// Do something with unwrappedNum & unwrappedStr
} else if let unwrappedNum = num {
// Do something with unwrappedNum
} else {
// num was nil
}
Примените дополнительные ограничения после необязательного связывания с помощью предложения where
:
if let unwrappedNum = num where unwrappedNum % 2 == 0 {
print("num is non-nil, and it's an even number")
}
Если вы чувствуете себя авантюрно, чередуйте любое количество необязательных привязок и where
:
if let num = num // num must be non-nil
where num % 2 == 1, // num must be odd
let str = str, // str must be non-nil
let firstChar = str.characters.first // str must also be non-empty
where firstChar != "x" // the first character must not be "x"
{
// all bindings & conditions succeeded!
}
В Swift 3, where
были заменены предложения ( SE-0099 ): просто используйте другое ,
чтобы отделить дополнительные привязки и логические условия.
if let unwrappedNum = num, unwrappedNum % 2 == 0 {
print("num is non-nil, and it's an even number")
}
if let num = num, // num must be non-nil
num % 2 == 1, // num must be odd
let str = str, // str must be non-nil
let firstChar = str.characters.first, // str must also be non-empty
firstChar != "x" // the first character must not be "x"
{
// all bindings & conditions succeeded!
}
Тернарный оператор
Условия могут также оцениваться в одной строке с использованием тернарного оператора:
Если вы хотите определить минимум и максимум две переменные, вы можете использовать операторы if, например:
let a = 5
let b = 10
let min: Int
if a < b {
min = a
} else {
min = b
}
let max: Int
if a > b {
max = a
} else {
max = b
}
Тернарный условный оператор принимает условие и возвращает одно из двух значений, в зависимости от того, было ли условие истинным или ложным. Синтаксис выглядит следующим образом: это эквивалентно выражению:
(<CONDITION>) ? <TRUE VALUE> : <FALSE VALUE>
Вышеприведенный код можно переписать с помощью тернарного условного оператора, как показано ниже:
let a = 5
let b = 10
let min = a < b ? a : b
let max = a > b ? a : b
В первом примере условие равно <b. Если это верно, результат, назначенный обратно в мин, будет равным; если оно ложно, результатом будет значение b.
Примечание. Поскольку поиск большего или меньшего из двух чисел является такой общей операцией, стандартная библиотека Swift предоставляет для этой цели две функции: max и min.
Nil-Coalescing Operator
Оператор nil-coalescing <OPTIONAL> ?? <DEFAULT VALUE>
разворачивает <OPTIONAL>
OPTIONAL <OPTIONAL>
если оно содержит значение, или возвращает <DEFAULT VALUE>
если nil. <OPTIONAL>
всегда имеет необязательный тип. <DEFAULT VALUE>
должен соответствовать типу, который хранится внутри <OPTIONAL>
.
Оператор nil-coalescing является сокращением для кода ниже, который использует тернарный оператор:
a != nil ? a! : b
это можно проверить по приведенному ниже коду:
(a ?? b) == (a != nil ? a! : b) // ouputs true
Время для примера
let defaultSpeed:String = "Slow"
var userEnteredSpeed:String? = nil
print(userEnteredSpeed ?? defaultSpeed) // ouputs "Slow"
userEnteredSpeed = "Fast"
print(userEnteredSpeed ?? defaultSpeed) // ouputs "Fast"
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow