如何NSData的(字节数:长度:)转换(字节)来UnsafePointer 在斯威夫特?(H

2019-10-21 01:31发布

原始数据打在斯威夫特我碰到的东西,我不明白。
NSData的有一个构造函数:

init(bytes: UnsafePointer<Void>, length: Int)

其中第一字节参数显然UnsafePointer类型。
然而,如果我通过[字节]对象给这个构造,不仅编译器不会抱怨,但它工作正常。
但是,如果我尝试施放[字节]UnsafePointer,我失败了。
这是如何运作的?

例如(你可以尝试在操场):

let buffer: [Byte] = [0x00, 0xff]
let data = NSData(bytes: buffer, length: buffer.count) // no error
data.description

var pointer: UnsafePointer<Void>
// comment this line to avoid compiler error
pointer = buffer // error

我知道我可以做

UnsafePointer<Void>(buffer)

但我的问题是,什么是NSData的构造做含蓄,我没有做到这一点。

Answer 1:

斯威夫特自己的类型映射到C指针,当你打电话,要求他们一个C函数。 苹果公司对这种互动了一下文档: 使用C API的交互 。

总之,当你调用一个函数,一个UnsafePointer<Type> ,它可以接受nil ,一个inout (即,该类型的变量,该类型的数组[Type]您所使用的,),或通用斯威夫特指针类型之一。 利用函数UnsafePointer<Void>可以采取任何这些,对类型没有约束可言,所以你需要阅读功能的文档,看看它预计/会回来。



文章来源: How does NSData(bytes:length:) convert [Byte] to UnsafePointer in Swift?