Предположим, я создаю протокол и структуру для столбца однородно типизированных данных:
protocol Columnizable {
associatedtype Item
var name: String { get }
var values: [Item] { get }
}
struct Column<T>: Columnizable {
var name: String
var values = [T]()
}
Я хотел бы создать расширение протокола, которое позволяет Numeric иметь функцию average
, которая может вычислять среднее значение.values
, если тип соответствует протоколу Numeric
, например, Double и Int
extension Columnizable where Item: Numeric {
func average() -> Double {
return Double(sum()) / values.count
}
func sum() -> Item {
return values.reduce(0, +)
}
}
Моя попытка функции average
не может быть скомпилирована из-за:
Cannot invoke initializer for type 'Double' with an argument list of type '(Self.item)'
Попытки разыграть удвоение не работают.Буду признателен за любые советы по передовому опыту.