если testValue
является Bool, то вы можете сказать:
if testValue {
//Code
}
Однако Swift более строго типизирован, чем C и другие C-подобные языки.
В C указатель может быть нулевым, равным нулю, что равно false, поэтому
if (aPointer) {}
эквивалентно
if (aPointer != nil)
ОднакоСвифт не позволяет этого.Типы указателей не могут быть нулевыми, nil
- это специальная настройка «без значения», которая не совпадает с нулем или ложью.
Вы должны явно сказать if aPointer != nil
вSwift.
Как уже отмечали другие, if let
- это нечто иное, известное как «необязательное связывание».Чтобы объяснить, что вам нужно понимать дополнительные параметры.
В Swift значения nil обрабатываются специальной оболочкой, известной как «Необязательный».Подумайте о Optional
как обернутом пакете, который может быть либо пустым, либо содержать объект.
Optional
либо содержит некоторое значение, либо содержит ноль.Чтобы получить внутреннее значение, нужно «развернуть» Optional
.
. Существует выражение «принудительное завершение» (!
), которое говорит: «Поверьте мне, я знаю, что Optional
никогда не сможетбыть ноль. "Если вы используете его, а Optional
не содержит , содержит ноль, ваша программа вылетает.Поэтому я называю это оператором «сбой, если ноль», и предлагаю вам избегать этого, если вы действительно не знаете, что делаете.
Тогда существует необязательное связывание «если позволено».В следующем коде:
var value: String?
if let testValue = value {
//test value only exists inside these braces.
print(value)
} else {
//testValue is not defined here
print("value is nil")
}
//testValue isn't defined here either.
if let
говорит: «если необязательная переменная value
содержит ненулевое значение, удалите значение из необязательного и поместите его в необязательное let
константа с именем testValue
, которая будет определяться только внутри фигурных скобок, следующих за оператором if
.
Существуют также другие способы работы с необязательными параметрами, такими как операторы guard
и «оператор объединения с нулем»но я оставлю это вам для изучения. Я не собираюсь освещать все аспекты Opionals
в коротком сообщении на форуме.