ожидаемое выражение в условном выражении - PullRequest
0 голосов
/ 23 февраля 2019

Я написал следующую функцию и получаю следующую ошибку в операторе защиты.

ожидаемое выражение в условном выражении

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 Ответ

0 голосов
/ 23 февраля 2019

Ключевое слово 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.

...