Я хотел бы использовать фреймворк Accelerate для расширения [Float] и [Double], но для каждого из них требуется другая реализация.Расширение типов массивов с использованием предложения where в Swift
Я попытался очевидное:
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
}
}
Это действительно помогло мне в несколько иной проблеме. Я переопределял Array и использовал contains (element), который не работал, пока я не ограничил расширение Element: Equatable. Чтобы узнать, что представляют собой различные ограничения (и какие методы они влияют) см. Также SequenceType: http://swiftdoc.org/v2.1/protocol/SequenceType/ –
Я думаю, вы должны использовать 'SequenceType' вместо' _ArrayType' – Daniel
ответ работает отлично с Swift 2.2, но _ArrayType исчез в Swift 3. Как нам это сделать сейчас? – Maiaux