目前我正在关注使用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 。
我想了解有关此语法的更多信息。如果你们中的任何人能够为我提供好的文字,网页或解释,我会非常感激。
提前谢谢。
答案 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。
的Nil-Coalescing Operator部分阅读更多内容