2014-09-07 20 views
8

tôi muốn lấy Độ dài của mảng bằng "sizeof". Tôi đã thử mọi thứ. Đây là thông báo lỗi: "[Int32] không thể chuyển đổi thành T.Type"Sử dụng Swift sizeof với Int32 Array

Mảng phải là Int32.

var testArray: [Int32] = [2000,400,5000,400] 
var arrayLength = sizeof(testArray) 

Trả lời

19

Bạn có thể nhận được số phần tử trong một mảng đơn giản với

let count = testArray.count 

và tổng số byte của các yếu tố của nó với

var arrayLength = testArray.count * sizeof(Int32) 
// Swift 3: 
var arrayLength = testArray.count * MemoryLayout<Int32>.size 

sizeof được sử dụng với các loại và sizeofValue với các giá trị, do đó cả hai

var arrayLength = sizeof([Int32]) 
var arrayLength = sizeofValue(testArray) 

sẽ biên dịch. Nhưng điều đó cung cấp cho bạn kích thước của struct Array, không phải kích thước của bộ nhớ phần tử.

+0

Tôi cần độ dài mảng theo byte. Mã của bạn không biên dịch. – Darx

+0

@Darx: Xem câu trả lời cập nhật. –

+0

Cảm ơn bạn. Làm việc và tôi hạnh phúc. Đã lãng phí 2 giờ ... nhưng bây giờ nó hoạt động. :) – Darx

1

Trong Xcode 8 với Swift 3 beta 6, không có hàm sizeof(). Nhưng nếu bạn muốn, bạn có thể xác định một cho nhu cầu của bạn. Tin tốt là, hàm sizeof mới này hoạt động như mong đợi với mảng của bạn.

let bb: UInt8 = 1 
let dd: Double = 1.23456 

func sizeof <T> (_ : T.Type) -> Int 
{ 
    return (MemoryLayout<T>.size) 
} 

func sizeof <T> (_ : T) -> Int 
{ 
    return (MemoryLayout<T>.size) 
} 

func sizeof <T> (_ value : [T]) -> Int 
{ 
    return (MemoryLayout<T>.size * value.count) 
} 

sizeof(UInt8.self) // 1 
sizeof(Bool.self) // 1 
sizeof(Double.self) // 8 
sizeof(dd)   // 8 
sizeof(bb)   // 1 

var testArray: [Int32] = [2000,400,5000,400] 
var arrayLength = sizeof(testArray) // 16 

Bạn cần tất cả các phiên bản của hàm sizeof, để nhận được kích thước của biến và để có được kích thước chính xác của loại dữ liệu và của một mảng.

Nếu bạn chỉ xác định hàm thứ hai, thì sizeof (UInt8.self) và sizeof (Bool.self) sẽ dẫn đến "8". Nếu bạn chỉ định nghĩa hai hàm đầu tiên, thì sizeof (testArray) sẽ dẫn đến "8".

Các vấn đề liên quan