gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:57:53 27 4
gpt4 key购买 nike

我想使用 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, 1, &result, vDSP_Length(x.count))
}
return result
}
}

最佳答案

如果你只想扩展特定类型的数组。您应该扩展 _ArrayType 协议(protocol)。

extension _ArrayType where Generator.Element == Int {

func doSomething() {
...
}
}

如果您扩展Array,您只能确保您的元素符合其他协议(protocol)。即:

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() {
...
}
}

关于swift - 在 Swift 中使用 where 子句扩展数组类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31806324/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com