iOS中如何将Data转换为支持负数的有符号Int8?
解决Swift中Data转Int8数组的问题
你遇到的错误是因为Swift没有直接提供从Data到[Int8]的初始化器,Data默认的元素类型是UInt8,可以通过以下两种方式完成转换:
方法一:内存绑定(高效推荐)
通过withUnsafeBytes直接访问Data的内存缓冲区,将其绑定到Int8类型,这种方式无需额外内存复制,效率更高:
class ViewController: UIViewController { let data: Data? = nil override func viewDidLoad() { super.viewDidLoad() guard let data = data else { return } let int8Array = data.withUnsafeBytes { buffer in Array(buffer.bindMemory(to: Int8.self)) } int8Array.forEach { print("--Doing stuff here", $0) } } }
方法二:先转UInt8数组再映射
先将Data转为[UInt8],再通过map将每个元素转换为Int8,这种方式更直观,但会产生一次数组复制:
class ViewController: UIViewController { let data: Data? = nil override func viewDidLoad() { super.viewDidLoad() guard let data = data else { return } let int8Array = [UInt8](data).map(Int8.init) int8Array.forEach { print("--Doing stuff here", $0) } } }
两种方式都能实现和Kotlin中ByteArray(有符号Int8)对应的效果,转换后的Int8数组可正确处理-128到127的负数取值范围。
内容的提问来源于stack exchange,提问作者Joakim Sjöstedt
相关产品推荐
相关产品推荐

