में क्लॉज का उपयोग करके सरणी प्रकारों का विस्तार करें, मैं [फ्लोट] और [डबल] का विस्तार करने के लिए त्वरित फ्रेमवर्क का उपयोग करना चाहता हूं लेकिन इनमें से प्रत्येक को एक अलग कार्यान्वयन की आवश्यकता है।स्विफ्ट
मैं स्पष्ट करने की कोशिश की:
extension Array<Float> {
}
और इस त्रुटि मिलती है:
"Constrained extension must be declared on the unspecialised generic type 'Array' with constraints specified by a 'where' clause"
यह इस तरह से सामान्य प्रकार का विस्तार करने स्विफ्ट 2 में posible है?
मुझे कोड अब अपेक्षित के रूप में काम कर रहा है। यहां एक उदाहरण है जो त्वरित रूपरेखा का उपयोग करके एक सारांश दिखा रहा है।
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
}
}
इससे वास्तव में मुझे थोड़ा अलग समस्या के लिए मदद मिली। मैं ऐरे को ओवरराइड कर रहा था और इसमें शामिल है (तत्व) जो तब तक काम नहीं करता जब तक कि मैंने एलिमेंट के विस्तार को बाधित नहीं किया: Equatable। यह देखने के लिए कि विभिन्न बाधाएं क्या हैं (और वे किन विधियों को प्रभावित करते हैं) SequenceType: http://swiftdoc.org/v2.1/protocol/SequenceType/ –
मुझे लगता है कि आपको '_ArrayType' – Daniel
के बजाय 'अनुक्रम प्रकार' का उपयोग करना चाहिए उत्तर स्विफ्ट 2.2 के साथ पूरी तरह से काम करता है, लेकिन स्विफ्ट 3 में _ArrayType गायब हो गया है। अब हमें यह कैसे करना चाहिए? – Maiaux