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

Why can I pass [UInt8] type to the UnsafePointer<UInt8> type parameter?

我们都知道[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]就OK了...

这是为什么?谢谢! ;)

只是一条捷径

不安全指针实际上是一个 C 数组:我们指向的是连续内存块的首地址。因此,当你有一个 Swift 数组,你想从中写入内存时,Swift 会给你一些很好的帮助:这个 Swift 数组一点也不像 C 数组,但是,您可以传递指向 Swift 数组甚至 Swift 数组本身的指针,包括数组文字,并且 Swift 会做正确的事情。