Проверка переменной в Swift - PullRequest
0 голосов
/ 30 декабря 2018

В Swift вы не можете проверять переменные напрямую, как это:

if testValue {
    ...
}

Однако вы можете проверить это, фактически переназначив его так:

let testValue: String?

if let test = testValue {
    ...
}

Почемутак?Что за магия под капотом ??

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

если 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 в коротком сообщении на форуме.

0 голосов
/ 30 декабря 2018

Условное связывание if let / for let / while let - это специальная форма, запеченная в языке.Часть let test = testValue - это не то же самое, что утверждение, которое она обычно анализирует.Он имеет особый, другой смысл, когда префикс if / for / while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...