【问题标题】:Swift conversion: ERROR - UnsafeMutablePointerSwift 转换:错误 - 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))))
有人可以帮我解决这个转换语法问题吗?
【问题讨论】:
标签:
swift
swift3
unsafe-pointers
【解决方案1】:
calloc 返回一个“原始指针”(在 C 中相当于 void * 的 Swift)。
您可以使用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)