如果密钥不存在,Swift 3相当于将值设置为字典密钥

时间:2017-01-18 19:25:13

标签: swift

在JavaScript中,如果我的“Dictionary”(技术上是javaScript对象)中不存在某个键,我会执行以下操作:

foo = foo || {}

if ( ! foo.someArg ) 
  foo.someArg = "I'm not set if I wasn't already";

所以我在Swift 3中的功能与以下内容一样简单:

func someFunc(foo: Dictionary<String, Any>)

该值设置为Any类型,因为它可以是StringInt类型。我想要做的是查看foo是否设置了密钥someArg,如果没有,请将其设置为合理的默认值。

if foo["someArg"] == null
  // doesn't seem to be the swift way to do it

使用Swift 3实现这一目标的常用习惯是什么?

2 个答案:

答案 0 :(得分:3)

The Nil-Coalescing Operator

foo["someArg"] = foo["someArg"] ?? "default value"
  

nil-coalescing operator a ?? b)如果包含值,则展开可选a,如果a为{,则返回默认值b {1}}。

如果要考虑写时复制性能,只需使用nil语句:

if

答案 1 :(得分:0)

为了获得不同选择的喜悦:您可以利用分配的结果是空元组()以仅执行内联"default value"分配这一事实如果给定的密钥(-value)"someArg"不存在。

foo["someArg"].map{ _ in () } ?? (foo["someArg"] = "default value")

这种方法与显式if语句很相似,在给定键(-value)确实存在的情况下不会受到不必要的赋值。但是,将此解决方案的语义与显式if语句进行比较,......