Tôi muốn sử dụng let rawDataFromArray = NSData(bytes: myArray, length: ???)
, nhưng không biết cách lấy độ dài byte cho mảng của mình. Dưới đây là một số ví dụ về những gì có thể mảng của tôi là:Cách nhận kích thước byte cho mảng tùy ý trong Swift?
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
}
Tôi không chắc chắn nếu đi qua mọi phần tử của mảng (và trong trường hợp của chuỗi trải qua tất cả các nhân vật, từ biểu tượng cảm xúc có thể có nhiều byte đại diện cho họ) là cách thích hợp để làm điều đó.
Cách nhận kích thước byte cho mảng?
Bất cứ ai có thể cho tôi biết cách thích hợp để làm điều đó?
Hoặc có thể thực tiễn không tốt là chuyển đổi Array
thành NSData
trong Swift?
Tôi cũng đã xem Converting Swift Array to NSData for persistent storage và Converting array of bytes to NSData và Custom Array to NSData, nhưng không thể tìm ra cách nhận kích thước byte cho mảng tùy ý như vậy.
Xem http://stackoverflow.com/questions/25714086/swift-use-sizeof-with-int32-array để biết ví dụ có thể được sử dụng cho một mảng các số nguyên hoặc phao. Nhưng bạn không thể đơn giản xử lý một mảng các chuỗi * như NSData, bởi vì cấu trúc 'String' (có kích thước cố định) chứa các con trỏ đục để lưu trữ ký tự thực tế. –
Cảm ơn @MartinR. Vì vậy, có vẻ như một ý tưởng tồi để chuyển đổi một mảng các chuỗi thành NSData. Bạn có thể giải thích thêm một chút về con trỏ đục không? – Andrej
'struct String' có các thành viên không nằm trong API" có thể nhìn thấy "(nhưng bạn có thể thấy chúng trong trình gỡ lỗi). Một số trong số này là các con trỏ đến dung lượng lưu trữ thực tế được sử dụng cho chuỗi. (Vì vậy, ví dụ, các chuỗi giống hệt nhau có thể * chia sẻ * bộ nhớ.) - Điểm là 'struct String' không phải là khép kín. Nếu bạn gói nó vào NSData, chuyển nó vào một nơi khác và giải nén nó, nó sẽ chứa các con trỏ không hợp lệ. - Tất nhiên bạn * có thể * tạo NSData từ một chuỗi các chuỗi, nhưng phải nối thêm mỗi chuỗi (ví dụ như chuỗi NUL-terminated UTF-8) một cách riêng biệt. –