Erreur du dictionary: reference ambiguë au membre '+'

J'ai le code suivant dans une méthode rapide 3:

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

Le code ne comstack pas en raison de la Ambiguous reference to member '+' erreur. Mais si j'essaie d'append seulement deux éléments, il comstack et fonctionne comme prévu.

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

Fonctionne normalement.

Ai-je manqué quelque chose de la façon dont la langue devrait fonctionner?

Une autre solution de contournement:

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

Vous pouvez résoudre l'erreur en enveloppant dict["A"] avec Int .

Cela va jeter la valeur de la key "A" à un Int, ce qui nous permet d'append correctement.

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

Ce code a été compilé avec succès:

 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 

Je suppose, ce problème lié à des expressions complexes. Vous pouvez en savoir plus sur l'optimization du time de construction dans cet article .

Comme d'autres l'ont remarqué, cela semble être un bug. Cependant, il semble que vous ne rencontrerez probablement pas cela, car il est assez dangereux de forcer un élément de dictionary comme ça. Cela fonctionne bien:

 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 }