Вы хотите знать, почему этот код:
let names = ["b", nil, "x"]
for case let name? in names {
print(name)
}
Производит этот вывод:
b
x
Вам интересно, что происходит с nil
.
Ответом является «Необязательный шаблон», который можно найти в справочнике по языку :
Необязательный шаблон обеспечивает удобный способ перебора массива необязательных значений.в выражении for-in выполнение тела цикла только для ненулевых элементов.
Ключевое слово case
жизненно важно.Это существенно меняет характер цикла for
.Как вы можете видеть из этой ошибки компилятора, name?
внутри цикла вообще не является обязательным.
![compiler error using guard on non-optional](https://i.stack.imgur.com/FnvWJ.png)
Думайте о ?
какоператор, который удаляет необязательность name
.Если в результате присваивания будет nil
, эта итерация цикла не произойдет, и начнется следующая итерация.
Обратите внимание, что без case
вы не получите такого же поведения вообще.
This:
for name in names {
print(name)
}
Получит этот вывод:
Optional("b")
nil
Optional("x")
И что ни один из них не работает вообще.
![enter image description here](https://i.stack.imgur.com/E0a2t.png)
![enter image description here](https://i.stack.imgur.com/MilMf.png)