swift - 为什么我可以将 [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了...
这是为什么?谢谢!;)
解决方案
这只是一个捷径。
不安全指针实际上是一个 C 数组:我们指向的是连续内存块的首地址。因此,当您有一个 Swift 数组要写入内存时,Swift 为您提供了一些很好的帮助:这个 Swift 数组与 C 数组完全不同,但是,您可以传递一个指向 Swift 数组的指针,甚至是Swift 数组本身,包括一个数组字面量,Swift 只会做正确的事。
推荐阅读
- kubernetes - gke 集群从 1.10.x 升级到 1.11.x 后,calico-node pod 不启动
- powershell - 具有空属性的选择对象-expandproperty
- docker - 从另一个 docker 容器访问端点
- abap - SELECT FROM @itab 导致语法错误。为什么?
- ios - iOS 上的 AWS Transcribe 错误:找不到具有指定主机名的服务器
- php - 用于 SQL Server 的 insert ignore into 的替代方案
- r - ggpubr:在标签中显示显着性水平(*** 或 ns)而不是 p 值
- python - 交换 PANDAS 数据框中的元素
- python - 如何在 SQLAlchemy 中将 pool_timeout 设置为无穷大?
- python - 如何在 Windows 上安装 libffi-dev 和 libssl-dev