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

在Swift中使用where子句扩展数组类型,第1张

概述我想使用Accelerate框架来扩展[Float]和[Double],但是每个都需要不同的实现。 我试过明显: extension Array<Float> {} 并得到此错误: “Constrained extension must be declared on the unspecialised generic type ‘Array’ with constraints specified 我想使用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() {       ...    }}
总结

以上是内存溢出为你收集整理的在Swift中使用where子句扩展数组类型全部内容,希望文章能够帮你解决在Swift中使用where子句扩展数组类型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1058735.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存