2016-12-09 2 views
1

У меня есть следующий код в быстром 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"]! 

Работы нормально.

Я пропустил что-то из того, как должен работать язык?

+1

Попробуйте бросить эти ссылки как: (! Dict [ "B"]) 'Int (! Dict [ "A"]) + Int' –

+0

Я думаю, что это ошибка в Swift, к сожалению. :(Вы должны иметь возможность обойти это, обернув первые два в круглых скобках так: '(dict [" A "]! + Dict [" B "!) + Dict [" C "]!'. –

+0

ЭТО ДОЛЖНО GO AS A BUG !!!! –

ответ

0

Вы можете устранить ошибку, обернув dict["A"] с помощью Int.

Это будет выдавать значение ключа «A» в Int, что позволяет нам правильно добавлять.

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

Этот код был успешно скомпилирован:

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.

0

Как прокомментировали другие, это кажется ошибкой. Однако кажется, что вы вряд ли столкнетесь с этим, потому что совершенно небезопасно принудительно развернуть элемент словаря. Это прекрасно работает:

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 
} 
1

Другой обходной путь:

let dict = ["A": 1, "B": 2, "C": 3] 
let sum = 0 + dict["A"]! + dict["B"]! + dict["C"]! 
Смежные вопросы