La tarea del libro dice: sin llamar al método reduce(_: _:), suma secuencias de números agregando una propiedad calculada llamada suma. Deberías poder usarlo así:
[3, 7, 7].sum // 17 [8.5, 1.1, 0.1].sum // 9.7Sugerencia de los autores: en la documentación del desarrollador, verifique a qué protocolos se ajustan Int y Double, y de qué protocolos heredan esos protocolos. Dentro del código a continuación, simplemente combiné dos soluciones que encontré, sin embargo, todavía contiene el método de reducción. Si puede ayudarme a comprender cómo se puede resolver esto / qué parte de la documentación del desarrollador proporciona una pista. Además, ¿cómo puedo evitar un error en el código actual/aplicar una posible solución en un rango cerrado?
extension Sequence where Element: Numeric { var sum: Any { return reduce(0, +) } } [3, 7, 7].sum [8.5, 1.1, 0.1].sum [1...4].sum // Error: Property 'sum' requires that 'ClosedRange<Int>' conform to 'Numeric'[1...4].sum está trabajando en una matriz de rango cerrado ( [...] significa "matriz de..."). Querías decir: (1...4).sum .
También quieres decir:
var sum: Element { ... } en lugar de Any .
Si desea hacerlo aún más genérico, puede pasar de Numeric a AdditiveArithmetic de esta manera:
extension Sequence where Element: AdditiveArithmetic { var sum: Element { reduce(.zero, +) } }De esa manera podría funcionar en cosas como vectores.