Ожидаемое выражение в условном выражении
Я написал следующую функцию и получаю следующую ошибку в заявлении охранника.
ожидаемое выражение в условном выражении
func containsNearbyDuplicate(_ nums: [Int], _ k: Int) -> Bool {
// form a dictionary key is the number, value is the index
var numDict = [Int : Int]()
for (i,num) in nums.enumerated()
{
guard let index = numDict[num] , where i - index <= k else
{
numDict [num] = i
continue
}
return true
}
return false
}
1 ответ
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
определения.