2017-01-01 126 views
0

我試圖將我的Swift 2代碼轉換成最新的語法(Swift 3)。我收到以下錯誤:Swift轉換:錯誤 - UnsafeMutablePointer

Cannot invoke initializer for type 'UnsafeMutablePointer<CUnsignedChar>' with an argument list of type '(UnsafeMutableRawPointer!)

斯威夫特2代碼:

let rawData = UnsafeMutablePointer<CUnsignedChar>(calloc(height * width * 4, Int(sizeof(CUnsignedChar)))) 

有人可以幫我解決這個轉換語法問題?

回答

1

calloc返回一個「原始指針」(C中的Swift等效於void *)。 你可以用assumingMemoryBound其轉換爲一個類型的指針:

let rawData = calloc(width * height, MemoryLayout<CUnsignedChar>.stride).assumingMemoryBound(to: CUnsignedChar.self) 

或者使用UnsafeMutablePointerallocate()方法:

let rawData = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: width * height) 
rawData.initialize(to: 0, count: width * height) 
// ... 

rawData.deinitialize() 
rawData.deallocate(capacity: width * height) 
相關問題