Ответ Кевина очень хороший.
Некоторая справка, которая поможет объяснить далее:
Код, который вы разместили, использует два довольно загадочных оператора вместе.
??
- этониль-коалесцирующий оператор.
Он принимает необязательное значение, которое может содержать ноль, и предоставляет новое значение для использования, когда оно содержит , содержит ноль.
Редактировать:
(Обратите внимание, что вы можете пропустить оператор nil-coalescing и использовать вместо него IntValue == -1
. Это работает, потому что только ненулевое значение -1
равно -1
. Необязательный, содержащий nil, не равен-1
.
Вы можете переписать строку как
print("\(IntValue == -1 ? "-" : "+")")
и получить тот же результат.)
Следующий хитрый бит - это «троичный оператор»».Это происходит от C. Это довольно загадочно, но также весьма полезно.
Это принимает форму boolean
?value_for_true
: value_for_false
Где boolean
- логическое выражение, которое оценивается как true
или false
.
Если boolean
истинно, то результатвсе троичное выражение является подвыражением value_for_true
.
Если boolean
равно false, результатом всего троичного выражения является подвыражение value_for_false
.
IntValue ?? 0 == -1
- логическая часть вашего троичного выражения.Он оценивается как true, если IntValue равно -1.Он оценивается как ложный, если IntValue содержит любое другое значение или если он содержит ноль.
(Обратите внимание, что переменные и пусть константы должны начинаться с строчных букв, поэтому IntValue
должно быть intValue
.)