मैं स्विफ्ट में एक सरणी UnsafePointer<DSPComplex> को फ्लोट्स की एक सरणी में कैसे परिवर्तित करूं?

मैंने यह पेज देखा है, लेकिन क्योंकि मैं तेजी से नया हूं, मेरे पास फ्लोट्स की एक सरणी के लिए इसे कैसे करना है, इस पर कोई सुराग नहीं है।

2
Duck 12 फरवरी 2019, 00:11

1 उत्तर

सबसे बढ़िया उत्तर

DSPComplex एक काल्पनिक और वास्तविक फ्लोट मान वाली संरचना है। वह दो फ्लोट है। इसे फ्लोट्स की एक सरणी में परिवर्तित नहीं किया जा सकता है। हालांकि आपको इसे पहले एक असुरक्षित बफर पॉइंटर में परिवर्तित करना होगा और फिर आप इसे एक ऐरे में पास कर सकते हैं। फिर आपके पास DSPComplex संरचनाओं की एक स्विफ्ट सरणी है।

func arrayForDSPComplex(pointer: UnsafePointer<DSPComplex>, count: Int) -> [DSPComplex] {
   let buffer = UnsafeBufferPointer<DSPComplex>(start: pointer, count: count)
   return Array(buffer)
}

आप चाहें तो जेनरिक का उपयोग करके इसे सामान्य भी कर सकते हैं।

func arrayForPointer<T>(_ pointer: UnsafePointer<T>, count: Int) -> [T] {
    let buffer = UnsafeBufferPointer(start: pointer, count: count)
    return Array(buffer)
}

परिवर्तनीय पॉइंटर्स के लिए आपको एक और फ़ंक्शन चाहिए।

func mutableArrayForPointer<T>(_ pointer: UnsafeMutablePointer<T>, count: Int) -> [T] {
    let buffer = UnsafeMutableBufferPointer(start: pointer, count: count)
    return Array(buffer)
}

आप पॉइंटर प्रकारों पर फंक्शन्स को एक्सटेंशन के रूप में डालकर इसे थोड़ा सुधार सकते हैं।

extension UnsafePointer {
    func arrayCopying(elementCount: Int) -> [Pointee] {
        let buffer = UnsafeBufferPointer(start: self, count: elementCount)
        return Array(buffer)
    }
}

extension UnsafeMutablePointer {
    func arrayCopying(elementCount: Int) -> [Pointee] {
        let buffer = UnsafeMutableBufferPointer(start: self, count: elementCount)
        return Array(buffer)
    }
}
``
2
TimTwoToes 12 फरवरी 2019, 00:45