在 Swift 中从 NSData 对象创建一个数组 [英] Create an Array in Swift from an NSData Object
问题描述
我正在尝试快速将整数数组存储到磁盘.我可以将它们放入一个 NSData 对象中进行存储,但是将它们放入一个数组中是很困难的.我可以使用 data.bytes
获取原始 COpaquePointer
数据,但找不到使用该指针初始化新 swift 数组的方法.有人知道怎么做吗?
I'm trying to store an array of integers to disk in swift. I can get them into an NSData object to store, but getting them back out into an array is difficult. I can get a raw COpaquePointer
to the data with data.bytes
but can't find a way to initialize a new swift array with that pointer. Does anyone know how to do it?
import Foundation
var arr : UInt32[] = [32,4,123,4,5,2];
let data = NSData(bytes: arr, length: arr.count * sizeof(UInt32))
println(data) //data looks good in the inspector
// now get it back into an array?
推荐答案
可以使用NSData
的getBytes
方法:
// the number of elements:
let count = data.length / sizeof(UInt32)
// create array of appropriate length:
var array = [UInt32](count: count, repeatedValue: 0)
// copy bytes into array
data.getBytes(&array, length:count * sizeof(UInt32))
print(array)
// Output: [32, 4, 123, 4, 5, 2]
<小时>
Swift 3 (Xcode 8) 的更新: Swift 3 有一个新类型 struct Data
这是具有适当值语义的 NS(Mutable)Data
的包装器.访问器方法略有不同.
Update for Swift 3 (Xcode 8): Swift 3 has a new type struct Data
which is a wrapper for NS(Mutable)Data
with proper value semantics.
The accessor methods are slightly different.
数组到数据:
var arr: [UInt32] = [32, 4, UInt32.max]
let data = Data(buffer: UnsafeBufferPointer(start: &arr, count: arr.count))
print(data) // <20000000 04000000 ffffffff>
数据到数组:
let arr2 = data.withUnsafeBytes {
Array(UnsafeBufferPointer<UInt32>(start: $0, count: data.count/MemoryLayout<UInt32>.stride))
}
print(arr2) // [32, 4, 4294967295]
<小时>
Swift 5 更新:
数组到数据:
let arr: [UInt32] = [32, 4, UInt32.max]
let data = Data(buffer: UnsafeBufferPointer(start: arr, count: arr.count))
print(data) // <20000000 04000000 ffffffff>
数据到数组:
var arr2 = Array<UInt32>(repeating: 0, count: data.count/MemoryLayout<UInt32>.stride)
_ = arr2.withUnsafeMutableBytes { data.copyBytes(to: $0) }
print(arr2) // [32, 4, 4294967295]
这篇关于在 Swift 中从 NSData 对象创建一个数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!