在Swift中使用where子句扩展数组类型

我想使用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() {
       ... 
   }
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...