在斯威夫特字典
问题描述:
鉴于目录和键增加或初始化一个Int最优化的方式,我想,如果它在字典中,或将其初始化到1在斯威夫特字典
的增加与键的值字典类型是字典,但通过设计,此键的值类型将始终为Int,因为它只会被此代码更改。
我到目前为止的代码是在下面,但想要优化它,以迅捷的风格。
let v = dict[key] as? Int
if v != nil {
dict[key] = v! + 1
} else {
dict[key] = 1
}
答
的一种方法是使用零合并运算符:
dict[key] = ((dict[key] as? Int) ?? 0) + 1
如果你知道字典的类型,你几乎可以做同样的,但没有铸造:
dict[key] = (dict[key] ?? 0) + 1
说明:
此运算符(??
)在左侧选择一个d在右侧不可选,如果不是nil
,则返回可选值。否则,它将返回正确的值作为默认值。
像这种三元运算表达式:
dict[key] ?? 0
// is equivalent to
dict[key] != nil ? dict[key]! : 0
我觉得右手边?也可以是可选的,所以结果将是一个可选的,如果你有零?零,那么结果将是零。方便的事情(firstChoice ?? secondChoice ?? thirdChoice ?? defaultValue) – gnasher729
@ gnasher729你说得对。由于操作符在右侧带有一个可选的版本而过载。 – Qbyte