为什么我可以将 [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 会做正确的事情。
我们都知道[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
这是为什么?谢谢! ;)
只是一条捷径
不安全指针实际上是一个 C 数组:我们指向的是连续内存块的首地址。因此,当你有一个 Swift 数组,你想从中写入内存时,Swift 会给你一些很好的帮助:这个 Swift 数组一点也不像 C 数组,但是,您可以传递指向 Swift 数组甚至 Swift 数组本身的指针,包括数组文字,并且 Swift 会做正确的事情。