Swift 转换:错误 - UnsafeMutablePointer

Posted

技术标签:

【中文标题】Swift 转换:错误 - UnsafeMutablePointer【英文标题】:Swift conversion: ERROR - UnsafeMutablePointer 【发布时间】:2017-01-01 20:16:25 【问题描述】:

我正在尝试将我的 Swift 2 代码转换为最新的语法(Swift 3)。我收到以下错误:

无法使用类型为“(UnsafeMutableRawPointer!) 的参数列表调用类型“UnsafeMutablePointer”的初始化程序

Swift 2 代码:

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

有人可以帮我解决这个转换语法问题吗?

【问题讨论】:

【参考方案1】:

calloc 返回一个“原始指针”(在 C 中相当于 void * 的 Swift)。 您可以使用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)

【讨论】:

以上是关于Swift 转换:错误 - UnsafeMutablePointer的主要内容,如果未能解决你的问题,请参考以下文章

将 swift 2.3 转换为 swift 3 错误

Swift 2.0 - stringByAppendingPathComponent 错误转换 [重复]

Swift 2 错误,转换为 JSON

转换为 Swift3 错误

SKPaymentTransaction(Swift 3)中的交易错误转换问题

处理 Swift 2.0 中的转换错误