【发布时间】:2015-08-04 10:04:55
【问题描述】:
我想使用 Accelerate 框架来扩展 [Float] 和 [Double],但每一个都需要不同的实现。
我尝试了显而易见的:
extension Array<Float> {
}
并得到这个错误:
"约束扩展必须在非特化泛型上声明 类型 'Array' 具有由 'where' 子句指定的约束"
是否可以通过这种方式在 Swift 2 中扩展泛型类型?
我的代码现在按预期工作了。这是一个使用 Accelerate 框架进行求和的示例。
extension _ArrayType where Generator.Element == Float {
func quickSum() -> Float {
var result: Float = 0
if var x = self as? [Float] {
vDSP_sve(&x, 1, &result, vDSP_Length(x.count))
}
return result
}
}
extension _ArrayType where Generator.Element == Double {
func quickSum() -> Double {
var result: Double = 0
if var x = self as? [Double] {
vDSP_sveD(&x, 1, &result, vDSP_Length(x.count))
}
return result
}
}
【问题讨论】:
标签: swift generics swift2 swift-extensions