swift - 关于使用 ?? 的一些解释给字典赋值

标签 swift dictionary

目前我正在关注这本不错的 App Development with Swift 一书,到目前为止,一切都得到了很好的解释。尽管如此,在练习之后我发现了一段我很想更好地理解的代码。我已经尝试到处查找信息,但我什至不知道名称是什么或如何找到它。废话不多说,就是下面的内容:

我有一本字典:

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 .

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

提前谢谢你。

最佳答案

?? 被称为“nil-coalescing”运算符。

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

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

例如:

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

在这种情况下,变量 tomatoes 等于“bread”,因为变量 cheese 从未被分配过变量。

如果你这样做了:

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

现在 tomatoes 等于“lettuce”,因为我们给了 cheese 一个值。因为 cheese 是可选的,所以该值会自动展开(这意味着我们可以直接使用它的值)。

如果您想阅读更多相关信息,请查看 Apple's documentation .

关于swift - 关于使用 ?? 的一些解释给字典赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47357710/

相关文章:

swift - Swift 中的惰性存储属性

python - 当净值不为正时将两个python字典合并为一个

python - 将字典传递给python中的字符串

python 字典排序奇怪(想要非字母顺序)

swift - 如何为可选字符串赋值做内联快捷方式

swift - 当我选择不同的 UITextField 时如何更改 UIPickerViewData?

Xcode Swift macOS,终端应用程序不执行 NSURLSession

ios - 你如何使用 Swift 关闭打开的文件?

c# - 如何初始化 ReadOnlyDictionary?

c++ - 在 map 中交换键和值