带有泛型函数参数的Swift Array扩展

时间:2017-10-24 20:47:37

标签: swift generics

我正在使用Swift 4并寻找一种方法来创建具有类型

的参数的数组集合的扩展函数
typealias Listener<T> = (T) -> Void

但是无法创建下面的扩展名(使用未声明的类型&#39; T&#39;)

extension Sequence where Element == Listener<T>{
    func callAll(t: T){
        self.forEach { $0(t) }
    }
}

有没有办法让它发挥作用?

1 个答案:

答案 0 :(得分:5)

您不能在代码中的T扩展名的标头处引入新的通用参数,但每种方法都可以包含通用参数。

typealias Listener<T> = (T) -> Void

extension Sequence {
    func callAll<T>(t: T)
        where Element == Listener<T>
    {
        self.forEach { $0(t) }
    }
}
let listeners: [Listener<Int>] = [
    { print($0) },
    { print($0 * 2) },
]

listeners.callAll(t: 2)