我想使用 Accelerate 框架来扩展 [Float] 和 [Double],但每个都需要不同的实现。
我尝试了显而易见的方法:
extension Array<Float> {
}
并得到这个错误:
“必须在非专用泛型上声明受限扩展
类型“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
}
}
如果您只想扩展具有特定类型的数组。您应该扩展 _ArrayType 协议。
extension _ArrayType where Generator.Element == Int {
func doSomething() {
...
}
}
如果你延长Array
您只能确保您的元素符合其他某些协议。 IE:
extension Array where Element: Equatable {
func doSomething() {
...
}
}
更新:
使用斯威夫特 3.1 https://github.com/apple/swift/blob/master/CHANGELOG.md
extension Array where Element == Int {
func doSomething() {
...
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)