首页 > 解决方案 > 为什么我可以将 [UInt8] 类型传递给 UnsafePointer类型参数?

问题描述

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

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

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<T>,但是我传类型[UInt8]的时候就OK了...

这是为什么?谢谢!;)

标签: swiftunsafe-pointers

解决方案


这只是一个捷径。

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


推荐阅读