Это, вероятно, так просто, но по причине Свифт не нравится моя реализация оператора + ...
у меня есть простой протокол номер:Swift неоднозначным перегружен оператор +
protocol Number : CustomStringConvertible {
var doubleValue: Double { get }
}
простая реализация одного и того же:
struct SimpleNumber : Number {
let doubleValue: Double
let description: String
init(_ double: Double) {
doubleValue = double
description = "\(double)"
}
}
и расширение для перегрузки операторов:
extension Number {
static func + (lhs: Number, rhs: Number) -> Number {
return SimpleNumber(lhs.doubleValue + rhs.doubleValue)
}
}
До сих пор так хорошо. Но теперь, когда я пытаюсь использовать этого оператора:
let number1: Number = SimpleNumber(1)
let number2: Number = SimpleNumber(2)
let number3: Number = number1 + number2;
Xcode сообщает мне, что оператор неоднозначен.
Итак, почему? Мое определение - единственное, что подходит для двух объектов Number
.
Что я делаю неправильно?
Я знал, что это была глупая ошибка ... Спасибо! – Jofkos
> 'Я предполагаю, что вы создали статическую функцию Number. +' Также похоже, что добавление функции в протокол через расширение также добавляет новую функцию для всех типов, реализующих это расширение с реализацией по умолчанию. Так что, возможно, код из вопроса создал ** две ** статические функции с одной и той же сигнатурой 'Number. +' * И * 'SimpleNumber. +', Последние просто вызывают прежние по умолчанию. Это * может быть * источником двусмысленности. – user28434