在斯威夫特字典

问题描述:

鉴于目录和键增加或初始化一个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 
+1

我觉得右手边?也可以是可选的,所以结果将是一个可选的,如果你有零?零,那么结果将是零。方便的事情(firstChoice ?? secondChoice ?? thirdChoice ?? defaultValue) – gnasher729

+0

@ gnasher729你说得对。由于操作符在右侧带有一个可选的版本而过载。 – Qbyte