【问题标题】:Increment number in Dictionary字典中的递增数字
【发布时间】:2015-05-20 16:49:11
【问题描述】:

我有一个字典[String:AnyObject],其中包含一些键和值。

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

我可以这样做:

let nr = dict["number"] as! Double
dict["number"] = nr + 10

但我不喜欢这种方式,所以我想知道是否还有其他方式

我试过了:

(dict["number"] as! Double) += 10

但这给了我一个错误:

二元运算符“+=”不能应用于“(Double)”和“Double”类型的操作数

为什么这不起作用?

【问题讨论】:

  • 您的第一个解决方案是实现您想要的最简洁和最易读的解决方案。为什么你认为这是错误的?
  • @DannyBravo 我不认为这是错误的 我非常好奇为什么第二个解决方案不起作用。而且我喜欢单行的东西:)
  • @DannyBravo 我个人认为第二个解决方案在我的其他代码中更简洁、更易读。
  • 很公平。不过,我不确定为什么其他选项不适合您。
  • 替代方案是dict["number"] = dict["number"]! + 10

标签: swift dictionary casting


【解决方案1】:

以下是另一种选择。如果你想避免强制打开一个可选的:

dict["number"] = (dict["number"] ?? 0) + 10

【讨论】:

    【解决方案2】:

    你很接近,事实上你可以使用+= 写字典,问题是你的演员。例如我们可以这样做:

    var dict = ["number" : 2]
    dict["number"]! += 10
    

    现在dict["number"] 返回12。现在这是创建一个新值 (12) 并将其替换到字典中,这只是一种简洁的查看方式。

    您的代码的问题是左侧(dict["number"] as! Double) 为您提供Double。所以你说(12),那么右边也是Double10)。所以你的代码最终看起来像(12) += 10,你可以清楚地看到这是有问题的,因为这相当于12 = 12 + 10,哎呀!

    话虽如此,如果您正在使用本机 Swift 词典,则可以使用我的第一个解决方案,否则您上面解决的解决方案也可以工作,只是时间长一点。

    最后,如果您真的在寻找一种适用于您的确切情况的衬里,您应该能够执行以下操作:

    dict["number"] = (dict["number"] as! Double) + 10
    

    【讨论】:

    • 这就是我如此困惑的原因,因为如果它是一个 [String:Double] 我知道我可以随心所欲地增加,猜猜这是正确的答案。对不起@matt :(
    • @Arbitur 没问题! :))))
    【解决方案3】:

    安全的投射方式是:

    if let num = dict["number"] as? Double {
        dict["number"] = num + 10
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-19
      • 2015-08-18
      • 2011-10-31
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多