有条件的预期表达
expected expression in conditional
我编写了以下函数,但在 guard 语句中出现以下错误。
expected expression in conditional
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
}
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
定义的约束。
我编写了以下函数,但在 guard 语句中出现以下错误。
expected expression in conditional
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
}
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
定义的约束。