我想使用Accelerate框架来扩展[Float]和[Double],但是每个都需要不同的实现。
我试过明显:
extension Array<Float> { }
并得到此错误:
“Constrained extension must be declared on the unspecialised generic
type ‘Array’ with constraints specified by a ‘where’ clause”
这是否可能扩展泛型类型在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,vDSP_Length(x.count)) } return result } }
如果你想扩展只有特定类型的数组。你应该扩展_ArrayType协议。
extension _ArrayType where Generator.Element == Int { func doSomething() { ... } }
如果你扩展Array,你只能确保你的元素符合一些协议。即:
extension Array where Element: Equatable { func doSomething() { ... } }
更新:
用Swift 3.1 https://github.com/apple/swift/blob/master/CHANGELOG.md
extension Array where Element == Int { func doSomething() { ... } }