【问题标题】:Swift Array extension with generic function parameter具有通用函数参数的 Swift 数组扩展
【发布时间】:2017-10-25 05:54:55
【问题描述】:

我正在使用 Swift 4 并正在寻找一种方法来为具有类型参数的数组集合创建扩展函数

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

但是无法创建下面的扩展(使用未声明的类型'T')

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

有没有办法让它工作?

【问题讨论】:

  • This 可以给你一些提示。

标签: swift generics


【解决方案1】:

你不能在代码中像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)

【讨论】:

  • 简单的解决方案,所以我将其标记为答案,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 2016-01-25
  • 2021-09-14
  • 2016-01-03
  • 1970-01-01
相关资源
最近更新 更多