我正在使用Swift 4并寻找一种方法来创建具有类型
的参数的数组集合的扩展函数typealias Listener<T> = (T) -> Void
但是无法创建下面的扩展名(使用未声明的类型&#39; T&#39;)
extension Sequence where Element == Listener<T>{
func callAll(t: T){
self.forEach { $0(t) }
}
}
有没有办法让它发挥作用?
答案 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)