【问题标题】:Dictionary error: Ambiguous reference to member '+' [duplicate]字典错误:对成员“+”的不明确引用 [重复]
【发布时间】:2016-12-09 13:08:44
【问题描述】:

我在 swift 3 方法中有以下代码:

let dict = ["A": 1, "B": 2, "C": 3]
let sum = dict["A"]! + dict["B"]! + dict["C"]!

由于Ambiguous reference to member '+' 错误,代码无法编译。但如果我尝试只添加两个元素,它会按预期编译和工作。

let dict = ["A": 1, "B": 2, "C": 3]
let sum = dict["A"]! + dict["B"]!

正常工作。

我是否遗漏了该语言的工作方式?

【问题讨论】:

  • 尝试投下这些引用,例如:Int(dict["A"]!) + Int(dict["B"]!)
  • 不幸的是,我认为这是 Swift 中的一个错误。 :( 您应该可以通过将前两个括在括号中来解决它,如下所示:(dict["A"]! + dict["B"!) + dict["C"]!.
  • 这应该是一个错误!!!!
  • @JacobKing 将它们包装在一起不起作用。但是当我强制类型为Int时它确实有效。
  • @Hamish 我也是。尽管如此,还是添加了类似 SO 的欺骗评论 :)

标签: ios swift swift3


【解决方案1】:

另一种解决方法:

let dict = ["A": 1, "B": 2, "C": 3]
let sum = 0 + dict["A"]! + dict["B"]! + dict["C"]!

【讨论】:

    【解决方案2】:

    您可以通过用Int 包裹dict["A"] 来解决错误。

    这会将键“A”的值转换为 Int,允许我们正确添加。

    let dict = ["A": 1, "B": 2, "C": 3]
    let sum = Int(dict["A"]!) + Int(dict["B"]!) + Int(dict["C"]!)
    

    【讨论】:

      【解决方案3】:

      这段代码已经编译成功:

      let dict = ["A": 1, "B": 2, "C": 3]
      let one = dict["A"]!
      let two = dict["B"]!
      let three = dict["C"]!
      let sum = one + two + three
      

      我猜,这个问题与复杂的表达式有关。您可以阅读有关构建时间优化的更多信息in this article

      【讨论】:

        【解决方案4】:

        正如其他人评论的那样,这似乎是一个错误。但是,您似乎不太可能遇到这种情况,因为强制解开这样的字典元素是非常不安全的。这工作正常:

        let dict = ["A": 1, "B": 2, "C": 3]
        
        if
          let a = dict["A"],
          let b = dict["B"],
          let c = dict["C"]
        {
          let sum = a + b + c
        }
        

        【讨论】:

          猜你喜欢
          • 2016-09-06
          • 1970-01-01
          • 2021-01-07
          • 1970-01-01
          • 2014-09-23
          • 2021-01-25
          • 2018-04-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多