当前位置: 首页 > 面试题库 >

通过NSData对象在Swift中创建一个数组

尉迟跃
2023-03-14
问题内容

我正在尝试将整数数组快速存储到磁盘。我可以将它们放到NSData对象中进行存储,但是很难将它们放回到数组中。我可以使用来获取COpaquePointer数据的原始数据,data.bytes但是找不到用该指针初始化新的swift数组的方法。有人知道怎么做吗?

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?

问题答案:

您可以使用以下getBytes方法NSData

// 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具有正确值语义的包装器。访问器方法略有不同。

数组到数据:

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 的初始化选项似乎都不是我想要的。 问题答案: 在Swift 3中 在Swift 2中(或者如果您已经有一个实例) 在Swift 1中(或者如果您有swift ): 另请注意,这 是一

  • 不过就是创建结构体的时候,根据每个对象的特征赋值不同的属性罢了 // 3.创建一个结构体变量 p1 := Person{"lnj", 33} per.say() p2 := Person{"zs", 18} per.Say()

  • 问题内容: 我们如何用Swift语言(例如&在Objective-C中)创建唯一的对象列表。 问题答案: 从Swift 1.2(Xcode 6.3 beta)开始,Swift具有本机集合类型。从发行说明中: 包括一个新的数据结构,该结构提供具有完整值语义的独特元素的通用集合。它与之桥接,提供与和类似的功能。 以下是一些简单的用法示例: 但是还有更多可用的方法。 更新: 现在,集合也记录在Swift

  • 问题内容: 我真的对在Swift中创建数组的方式感到困惑。您能否告诉我,有多少种方法可以创建一个带有细节的空数组? 问题答案: 干得好: 上面的内容还适用于其他类型,而不仅仅是字符串。这只是一个例子。 为它增值 我想您最终将要为其添加一个值! 要么 通过插入添加 一旦有了一些值,就可以插入新值而不是附加值。例如,如果要在数组的开头插入新对象(而不是将它们附加到末尾): 或者,您可以使用变量使插入更

  • 我正在快速有效地学习单例模式来创建单例类,并找到了如下创建的最佳方法。 因为我使用了语句,所以它是只读属性,必须是线程安全的,所以从目标C开始就不需要调度一次。用于将变量设置为变量。 但这如何保证在整个应用程序中只创建一个实例呢?有什么我错过的小东西吗?

  • 我需要创建一个对象(银行),其中包含一组客户端和bankID。我的问题是,我不知道如何在主函数中创建银行。 银行类别: 客户端类: 主要类别: 这些是问题所在: 你必须创建一个程序来模拟银行活动。该系统包括以下模块:银行—客户(客户数组)— idBank(字符串)5 BancAccount — accountNumber(字符串)—金额(浮点)客户—姓名(字符串)—地址(字符串)—账户(银行账户数