在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
类型,因为它可以是String
或Int
类型。我想要做的是查看foo
是否设置了密钥someArg
,如果没有,请将其设置为合理的默认值。
if foo["someArg"] == null
// doesn't seem to be the swift way to do it
使用Swift 3实现这一目标的常用习惯是什么?
答案 0 :(得分:3)
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
语句进行比较,......