मैं ओएस एक्स के लिए स्विफ्ट में बाहरी सी लाइब्रेरी के साथ काम कर रहा हूं। मुझे एक मूल्य सीडीए मिलता है, जिसे सी में double*
के रूप में परिभाषित किया गया है (यह एक डबल सरणी के लिए एक सूचक है)।अपेक्षित तर्क प्रकार 'UnsafePointer <_>'
स्विफ्ट में आयात करते समय, यह इस प्रकार को UnsafeMutablePointer के रूप में पहचानता है। मैं इस पॉइंटर और गिनती को डबल सरणी में बदलने की कोशिश कर रहा हूं।
Cannot convert value of type 'UnsafePointer<Double>' to expected argument type 'UnsafePointer<_>'
मैं:
let doublearrptr = UnsafePointer<Double>(cda)
let xptarr = UnsafeBufferPointer<Double>(start: doublearrptr, count:arrlen)
हालांकि, जब इस कोड टुकड़ा संकलन, मैं त्रुटि मिलती है: यहाँ कोड है कि मैं उपयोग कर रहा हूँ (arrlen मान सरणी की सही गिनती की जाती है) है स्विफ्ट के लिए अपेक्षाकृत नया, लेकिन मैं काफी हद तक निश्चित हूं कि मैं UnsafePointer<_>
में परिवर्तित नहीं कर सकता। मैंने UnsafePointer<Void>
में कनवर्ट करने का प्रयास किया, लेकिन उसे एक ही त्रुटि मिली। स्विफ्ट यह मानता है कि cda
UnsafeMutablePointer<Double>
है।
जब आप कहते हैं कि "यह प्रकार को असुरफ्यूटेबल पॉइंटर के रूप में पहचानता है", तो क्या आपका मतलब यह है कि यह इसे 'असुरक्षित म्यूटेबल पॉइंटर' के रूप में पहचानता है? –
paulvs
हां, क्षमा करें। यह डबल को पहचानता है। – Laxsnor
क्या आप अलग-अलग कोड पोस्ट कर सकते हैं जो लाइब्रेरी पर निर्भर नहीं है? (उदाहरण के लिए एक सी डबल सरणी घोषित करें, और इसे एक स्विफ्ट 'ऐरे' में परिवर्तित करने का प्रयास करें) और दिखाएं कि कौन सी रेखा त्रुटि उत्पन्न कर रही है? आपके द्वारा पोस्ट किया गया कोड ठीक लगता है। –
paulvs