2014-09-24 17 views
8

को मैं स्विफ्ट में एक struct बनाया आरजीबी, काफी सरल बुलाया:Typecast UnsafeMutablePointer <Void> UnsafeMutablePointer <#Struct प्रकार #>

struct PixelRGB { 
    var r: CUnsignedChar = 0 
    var g: CUnsignedChar = 0 
    var b: CUnsignedChar = 0 

    init(red: CUnsignedChar, green: CUnsignedChar, blue: CUnsignedChar) { 
     r = red 
     g = green 
     b = blue 
    } 
} 

और मैं एक सूचक var imageData: UnsafeMutablePointer<PixelRGB>! है।

मैं इस सूचक के लिए कुछ स्थान malloc करना चाहते हैं, लेकिन malloc रिटर्न UnsafeMutablePointer<Void> और मैं इसे नीचे की तरह डाली नहीं कर सकते हैं:

imageData = malloc(UInt(dataLength)) as UnsafeMutablePointer<PixelRGB> // 'Void' is not identical to `PixelRGB` 

वैसे भी इस समस्या के समाधान के लिए? आपके सहयोग के लिए धन्यवाद!

+2

कैसे के बारे में 'imageData = UnsafeMutablePointer .alloc (dataLength)'? – matt

+0

@matt यह एक उत्तर होना चाहिए। –

+0

ओके-डोकी, करेंगे। – matt

उत्तर

19

मुझे लगता है कि तुम क्या कहना चाहते हैं कुछ इस तरह है:

imageData = UnsafeMutablePointer<PixelRGB>.alloc(dataLength) 
+0

और इसे कैसे मुक्त करें? –

+0

@AntonHolmquist imageData.destroy() –

+0

@ एंटोनहोल्मक्विस्ट alloc के विपरीत() dealloc() है। नष्ट() विधि प्रारंभिक() के समकक्ष है। – eofster

1

आप निम्नलिखित की कोशिश की?

imageData = unsafeBitCast(malloc(UInt(dataLength)), UnsafeMutablePointer<PixelRGB>.self) 

रेफरी: Using Legacy C APIs with Swift

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