字典错误:模糊引用成员'+'

我有一个快速3方法下面的代码:

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

该代码不能编译,因为Ambiguous reference to member '+'错误的Ambiguous reference to member '+' 。 但是,如果我尝试添加只有两个元素它编译和按预期工作。

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

正常工作。

我错过了语言应该如何工作?

另一个解决方法:

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

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

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

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

此代码已成功编译:

 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 

我猜,这个问题涉及到复杂的expression式。 在本文中,您可以阅读关于构build时间优化的更多信息。

正如其他人所评论的,这似乎是一个错误。 然而,看起来你不太可能遇到这种情况,因为强制打开这样的字典元素是非常不安全的。 这工作正常:

 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 }