func multiply<T: Strideable> (lhs: T, rhs: T) -> T {
return lhs * rhs
}
Почему это возвращение к ошибке: кандидаты Нет «*» производят ожидаемый контекстная результата тип результата «T»Generic Swift Функция Error Swift 3,0
func multiply<T: Strideable> (lhs: T, rhs: T) -> T {
return lhs * rhs
}
Почему это возвращение к ошибке: кандидаты Нет «*» производят ожидаемый контекстная результата тип результата «T»Generic Swift Функция Error Swift 3,0
нашел работу вокруг, расширив * оператора типы Double, Int и Float.
protocol Numeric {
func *(lhs: Self, rhs: Self) -> Self
}
extension Double: Numeric {}
extension Float: Numeric {}
extension Int: Numeric {}
Посмотрите в Strideable протокол, он не имеет метод ''. Если вы предпочитаете это так, чтобы «T» можно было умножить на другое «T», вы должны скорее объявить его таким образом, чтобы «T» имел «».
func multiply<T: Strideable> (lhs: T, rhs: T) -> T where T:IntegerArithmetic {
return lhs * rhs
}
Или вы также можете сделать то, что предлагает другой ответ, поскольку с помощью этого метода вы можете использовать только целые числа.
Хороший эксперимент, но мне интересно, какие недостатки в распространении всех этих примитивных типов с протоколом, который перегружает символ умножения, есть, если таковые имеются? – clearlight
Это прекрасно, и оператор умножения не перегружен, он просто пропускает функции, которые используют числовой тип, доступный этому оператору для использования – MathewS