为什么我可以将 [UInt8] 类型传递给 UnsafePointer<UInt8> 类型参数?

时间:2021-06-18 02:42:34

标签: swift unsafe-pointers

我们都知道 [UInt8] 类型不等于 UnsafePointer,

但是为什么我可以将 [UInt8] 类型传递给 UnsafePointer 类型参数:

let p = UnsafeMutablePointer<UInt8>.allocate(capacity: 4)
p.initialize(repeating: 0, count: 4)

let ary:[UInt8] = [1,2,3,4]
p.assign(from: ary, count: 4)  // It's OK, why?

如上图,p.assign方法的第一个参数类型是UnsafePointer,但是传入类型[UInt8]就可以了...

这是为什么?谢谢! ;)

1 个答案:

答案 0 :(得分:2)

这只是一个捷径。

不安全指针实际上是一个 C 数组:我们指向的是连续内存块的第一个地址。因此,当你有一个想要写入内存的 Swift 数组时,Swift 会给你一些很好的帮助:这个 Swift 数组与 C 数组完全不同,但是,你可以传递一个指向 Swift 数组的指针,甚至是Swift 数组本身,包括数组字面量,Swift 会做正确的事情。