IntValue ??0 == -1?"-": "+" Что это значит? - PullRequest
0 голосов
/ 23 ноября 2018

Я импортирую информацию о цене и добавляю + или -.

Я положил код заголовка в print (), и он работает, но я не знаю, что это значит.

print("\(IntValue ?? 0 == -1 ? "-" : "+")")

Пожалуйста, кратко объясните мне.

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Ответ Кевина очень хороший.

Некоторая справка, которая поможет объяснить далее:

Код, который вы разместили, использует два довольно загадочных оператора вместе.

?? - этониль-коалесцирующий оператор.

Он принимает необязательное значение, которое может содержать ноль, и предоставляет новое значение для использования, когда оно содержит , содержит ноль.


Редактировать:

(Обратите внимание, что вы можете пропустить оператор 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.)

0 голосов
/ 23 ноября 2018

Переменная IntValue является необязательной, что означает либо целое число, либо nil.IntValue ?? 0 означает, что если существует IntValue, используйте значение IntValue.Если IntValue равно nil, используйте значение 0. Затем сравните это значение с -1.Если это значение равно -1, выведите -.Если это значение не равно -1, выведите +.

Вот эквивалентный код только с утверждениями if:

var defaultInt = 0
if IntValue != nil {
    defaultInt = IntValue! // force unwrap the optional value
}
if defaultInt == -1 {
    print("-")
}
else {
    print("+")
}
...