小编GSc*_*ivs的帖子

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

我想使用Accelerate框架扩展[Float]和[Double],但每个都需要不同的实现.

我试过了明显的事:

extension Array<Float> {
}
Run Code Online (Sandbox Code Playgroud)

并得到此错误:

"必须在非特定的泛型类型'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
    }
}
Run Code Online (Sandbox Code Playgroud)

generics swift swift-extensions swift2

70
推荐指数
4
解决办法
3万
查看次数

标签 统计

generics ×1

swift ×1

swift-extensions ×1

swift2 ×1