关于使用??的一点解释将值赋予字典

时间:2017-11-17 19:12:36

标签: swift dictionary

目前我正在关注使用Swift的好书App开发,到目前为止所有内容都解释得很棒。然而,在练习之后,我发现了一些我更喜欢理解的代码。我已经尝试过到处查看信息,但我甚至不知道名称是什么或如何找到它。所以没有更多话要说,它是以下内容:

我有一本字典:

var frequencyOfAnswers: [AnimalType: Int] = [:]

AnymalType只是enum,有四个案例。然后他们在frequencyOfAnswers

上执行映射
let responseTypes = responses.map { $0.type }

到目前为止一切都很好。但是在接下来的迭代中:

for response in responseTypes {
    frequencyOfAnswers[response] = (frequencyOfAnswers[response]
    ?? 0) + 1
}

我无法完全理解??的用法。我知道这里的重点是,如果新元素尚未进入字典,那么将被添加并且它将具有值1.并且如果它已经存在,则其对应的整数值将增加1 。

我想了解有关此语法的更多信息。如果你们中的任何人能够为我提供好的文字,网页或解释,我会非常感激。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

??被称为" nil-coalescing"操作

很简单,它检查一个可选变量以查看它是否有值,并且:

  • 如果是,则打开并使用该值
  • 如果,则使用运算符右侧的值。

例如:

var cheese: String?
var tomatoes = cheese ?? "bread"

在这种情况下,变量tomatoes等于"面包"因为变量cheese从未被赋予变量。

如果你这样做了:

var cheese: String?
cheese = "lettuce"
var tomatoes = cheese ?? "bread"

现在tomatoes等于"生菜"因为我们给了cheese一个值。因为cheese是可选的,所以该值会自动解包(这意味着我们可以直接使用它的值)。

如果您想了解更多相关信息,请查看Apple's documentation

答案 1 :(得分:0)

??是Nil-Coalescing运算符。

  

nil-coalescing运算符(a ?? b)如果包含值,则展开可选a;如果a为n,则返回默认值b。表达式a始终是可选类型。表达式b必须与存储在。

中的类型相匹配

nil-coalescing运算符是下面代码的简写:

a != nil ? a! : b

它用于为没有值的Optional类型定义默认值。在您的示例中,在frequencyOfAnswers字典没有给定响应类型键的值的情况下,将frequencyOfAnswers字典值设置为0。

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html

的Nil-Coalescing Operator部分阅读更多内容