我想使用
let rawDataFromArray = NSData(bytes: myArray, length: ???)
,但不知道如何获取我的数组的字节数。以下是一些可能的数组示例:let arr1 = [1, 2, 3]
let arr2 = [1.0, 23556789000.0]
let arr3 = ["hello", "ok", ""]
func arrayLength(myArray: Array) -> Int {
var bytes = 0
for object in myArray {
// not sure what to do here
}
return bytes
}
我不确定遍历数组中的每个元素(字符串的情况下,遍历每个字符,因为表情符可能会有更多字节来表示它们)是否是正确的方法。
如何获取数组的字节大小?
有没有人能告诉我正确的做法?
或者在Swift中将Array
转换为NSData
并不是一个好习惯?
我也看到了将Swift数组转换为NSData进行持久化存储、将字节数组转换为NSData和自定义数组转换为NSData,但是无法弄清楚如何获取任意数组的字节大小。
struct String
有一些成员不属于“可见”的API(但你可以在调试器中看到它们)。其中一些是指向字符串实际存储使用的指针。(因此,例如,相同的字符串可以共享存储空间。)——重点是struct String
不是自包含的。如果你将其打包到NSData中,然后将其传输到其他地方并解包它,它将包含无效的指针。当然,你可以从字符串数组创建NSData,但必须分别附加每个字符串(例如作为NUL终止的UTF-8字符串)。 - Martin R