Как использовать функцию уменьшения в Swift для универсального массива? - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть общий массив, как это -

let array = arrayOfElements as! [T]

Я хочу добавить элементы массива, используя функцию swift по умолчанию (уменьшить).

Как я могу это сделать?

Я использую, как показано ниже -

let result = array.reduce(0,+)

показывает ошибку, неоднозначная ссылка на член '+'

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вы не можете.T может быть любого типа, включая типы, которые не имеют оператора + и / или не могут быть созданы из целочисленного литерала 0. Эти требования предусмотрены числовым протоколом, поэтому вы можете определить свой параметр типа как <T: Numeric>чтобы сделать эту работу

0 голосов
/ 23 ноября 2018

Откуда вы знаете, что T - это тип, который можно добавить?T может быть чем угодно, не так ли?Что если T равно Bool?Значения True и False, конечно, не могут быть добавлены.

Чтобы иметь возможность добавлять T s, диапазон возможных типов для T должен быть ограничен.T должен соответствовать протоколу Numeric.Поскольку протокол Numeric определяет оператор +, мы можем быть уверены, что независимо от того, что T, пока оно соответствует Numeric, его можно добавить.

Вы можете сделать что-то вродеэто:

func sum<T: Numeric>(_ array: [T]) -> T {
    return array.reduce(0, +)
}

или расширение:

extension Sequence where Element : Numeric {
    func sum() -> Element {
        return reduce(0, +)
    }
}

Обратите внимание, что в обоих случаях я установил ограничение : Numeric.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...