0

我编写了以下函数,并在保护语句中收到以下错误。

条件中的预期表达式

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

}
4

1 回答 1

3

关键字将where另一个表达式添加到实际guard语句的第一个表达式。相反,您可以用逗号分隔两个表达式并删除where关键字。

这是为什么?

if在 Swift 中,您可以在一个orguard语句中枚举多个用逗号分隔的表达式,如下所示:

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 {}

为什么互联网显示代码示例在哪里ifguard一起使用where

这是因为在较旧的 Swift 版本中,它可以与和where一起使用。但是后来这被删除了,因为它旨在将表达式添加到非表达式语句中,例如或作为和定义的约束。ifguardwherefor-inclassstruct

于 2019-02-22T21:55:36.773 回答