字典中的增量数

Arb*_*tur 3 dictionary casting swift

我有一个[String:AnyObject]包含一些键和值的字典.

我想增加一个值为Double类型的键.

我可以这样做:

let nr = dict["number"] as! Double
dict["number"] = nr + 10
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这样,所以我想知道是否有另一种方式

我试过这个:

(dict["number"] as! Double) += 10
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误:

二进制运算符'+ ='不能应用于'(Double)'和'Double'类型的操作数

为什么这不起作用?

nan*_*nta 13

以下是一个替代方案。如果您想避免强制解包可选:

dict["number"] = (dict["number"] ?? 0) + 10
Run Code Online (Sandbox Code Playgroud)


Fir*_*iro 6

你很亲密,实际上你可以用字母写字典+=,问题就是你的演员.例如,我们可以这样做:

var dict = ["number" : 2]
dict["number"]! += 10
Run Code Online (Sandbox Code Playgroud)

现在dict["number"]回来了12.现在这是创建一个新值(12)并将其替换为字典,它只是一种干净的方式来查看它.

你的代码的问题是左边(dict["number"] as! Double)给你一个Double.所以你说(12),然后右边Double也是(10).所以你的代码最终看起来像(12) += 10你可以清楚地看到有问题,因为这相当于12 = 12 + 10,yikes!

所以说,如果你正在使用原生的Swift词典,你可以使用我的第一个解决方案,否则你上面解决的解决方案也可以工作,只需要更长一点.

最后,如果您真的在寻找适合您的确切情况的单线程,您应该可以执行以下操作:

dict["number"] = (dict["number"] as! Double) + 10
Run Code Online (Sandbox Code Playgroud)


Jam*_*mes 5

另外一个选择:

dict["number", default: 0] += 10
Run Code Online (Sandbox Code Playgroud)