如何从 Swift 3 中的不透明指针创建类型化指针?

Posted

技术标签:

【中文标题】如何从 Swift 3 中的不透明指针创建类型化指针?【英文标题】:How to create a typed pointer from an opaque pointer in Swift 3? 【发布时间】:2016-09-16 20:39:11 【问题描述】:

转换为 Swift 3 时出现编译器错误:

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

当尝试从不透明指针创建类型化指针时:

let imageRef = myUIImage.cgImage!
let context = CGContext(...)!
let rect = CGRect(...)
context.draw(imageref, in: rect)

var data = context.data
var dataType = UnsafeMutablePointer<UInt8>(data) //Throws the error

为什么这不起作用?

【问题讨论】:

比较How to get bytes out of an UnsafeMutableRawPointer? 【参考方案1】:

content.data 返回一个UnsafeMutableRawPointer。它有一个 bindMemoryassumingMemoryBound 方法来转换为类型化指针:

let dataType = data.bindMemory(to: UInt8.self, capacity: n) // UnsafeMutablePointer<UInt8>

我没有机会测试n 是什么,但我怀疑它会是这样的:

n = width * height * bitsPerPixel / 8

【讨论】:

以上是关于如何从 Swift 3 中的不透明指针创建类型化指针?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Swift中为UIImages创建一个闪烁的指针效果

如何在 Swift 中声明、创建和使用方法指针?

java中的不可变类型的探究

什么定义了 C 中的不透明类型,它们什么时候需要和/或有用?

Android Studio 中的不透明度级别

Swift 的不安全