Ключевое слово where
добавляет другое выражение к первому выражению фактического оператора guard
.Вместо этого вы можете разделить оба выражения запятой и удалить ключевое слово where
.
Почему это так?
В Swift вы можете перечислить несколько выражений, разделенных запятыми водин оператор if
или guard
выглядит так:
if a == b, c == d {}
guard a == b, c == d else {}
Это похоже на оператор &&
.Разница в том, что версия с запятой допускает развертывание опций , например, так:
if let nonOptional = optional, let anotherNonOptional = anotherOptional {}
guard let nonOptional = optional, let anotherNonOptional = anotherOptional else {}
Почему в Интернете показаны примеры кода, где if
и guard
используются вместес where
?
Это потому, что в старых версиях Swift можно было использовать where
вместе с if
и guard
.Но затем это было удалено, потому что where
предназначался для добавления выражения к выражению без выражения, например for-in
, или как ограничение для определений class
и struct
.