Расширение для массива с замыканиями - PullRequest
0 голосов
/ 23 января 2019

У меня есть массив, содержащий замыкания со следующим типом замыканий:

typealias FuncT = (()->Void)

Я хочу добавить метод расширения в массив, содержащий мои функции:

extension Array where Element : FuncT {
    func execAll() {
        self.forEach { (f) in
            f()
        }
    }
}

Я получаю ошибку компиляции:

Тип «Элемент» ограничен внепротокольным типом «FuncT», не относящимся к классу. (aka '() -> ()')

Как я могу добавить метод в массив, содержащий мои функции?

1 Ответ

0 голосов
/ 23 января 2019

Ограничение where A : B ограничивает A подклассами класса B или типами, соответствующими протоколу B. Типы функций являются типами значений, но не классами, и не могут соответствовать протоколам.

То, что вам нужно, это «требование того же типа» where A == B. В вашем случае:

extension Array where Element == FuncT { ... }
...