2016-05-15 12 views
5

मैं ओएस एक्स के लिए स्विफ्ट में बाहरी सी लाइब्रेरी के साथ काम कर रहा हूं। मुझे एक मूल्य सीडीए मिलता है, जिसे सी में 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> में कनवर्ट करने का प्रयास किया, लेकिन उसे एक ही त्रुटि मिली। स्विफ्ट यह मानता है कि cdaUnsafeMutablePointer<Double> है।

+0

जब आप कहते हैं कि "यह प्रकार को असुरफ्यूटेबल पॉइंटर के रूप में पहचानता है", तो क्या आपका मतलब यह है कि यह इसे 'असुरक्षित म्यूटेबल पॉइंटर ' के रूप में पहचानता है? – paulvs

+0

हां, क्षमा करें। यह डबल को पहचानता है। – Laxsnor

+0

क्या आप अलग-अलग कोड पोस्ट कर सकते हैं जो लाइब्रेरी पर निर्भर नहीं है? (उदाहरण के लिए एक सी डबल सरणी घोषित करें, और इसे एक स्विफ्ट 'ऐरे ' में परिवर्तित करने का प्रयास करें) और दिखाएं कि कौन सी रेखा त्रुटि उत्पन्न कर रही है? आपके द्वारा पोस्ट किया गया कोड ठीक लगता है। – paulvs

उत्तर

3

तो, मैं इसे हल करने में सक्षम था, यद्यपि एक चौराहे के रास्ते में।

मैं एक नया समारोह परिवर्तित बनाया है और यह प्रयोग किया है:

func convertArr<T>(count: Int, data: UnsafePointer<T>) -> [T] { 

    let buffer = UnsafeBufferPointer(start: data, count: count) 
    return Array(buffer) 
} 
... 
let doublearrptr = UnsafePointer<Double>(cda) 
let arr = convertArr(Int(shobjarrlen), data: doublearrptr) 

इस काम करता है किसी कारण नहीं बल्कि मूल वाक्य रचना के लिए ...

मैं अभी भी क्यों से हो रही जवाब के लिए खुला रहा हूँ मेरा मूल वाक्यविन्यास काम नहीं किया।

+0

वाह, अच्छा खोज। पूरी तरह से सहमत हैं कि आपका मूल कोड ठीक होना चाहिए था। मुझे एक ही समस्या थी - मेरे लिए यह स्विफ्ट में एक बग की तरह दिखता है। – HughHughTeotl

संबंधित मुद्दे