我正在尝试将我的 Swift 2 代码转换为最新的语法 (Swift 3)。我收到以下错误:
Cannot invoke initializer for type 'UnsafeMutablePointer<CUnsignedChar>' with an argument list of type '(UnsafeMutableRawPointer!)
swift 2 代码:
let rawData = UnsafeMutablePointer<CUnsignedChar>(calloc(height * width * 4, Int(sizeof(CUnsignedChar))))
有人可以帮我解决这个转换语法问题吗?
最佳答案
calloc
返回一个“原始指针”(Swift 相当于 C 中的 void *
)。
您可以使用 assumingMemoryBound
将其转换为类型指针:
let rawData = calloc(width * height, MemoryLayout<CUnsignedChar>.stride).assumingMemoryBound(to: CUnsignedChar.self)
或者使用 UnsafeMutablePointer
的 allocate()
方法:
let rawData = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: width * height)
rawData.initialize(to: 0, count: width * height)
// ...
rawData.deinitialize()
rawData.deallocate(capacity: width * height)
关于快速转换 : ERROR - UnsafeMutablePointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41418647/