Swift use sizeof con Int32 Array

Quiero get la longitud de una matriz con "sizeof". Lo intenté todo. Este es el post de error: "[Int32] no es convertible a T.Type"

La matriz tiene que ser Int32.

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

Puede get el número de elementos en una matriz simplemente con

 let count = testArray.count 

y el número total de bytes de sus elementos con

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

sizeof se usa con types y sizeofValue con valores, por lo que ambos

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

comstackr Pero eso le da el tamaño de la struct Array , no el tamaño del elemento de almacenamiento.

En Xcode 8 con Swift 3 beta 6 no hay function sizeof (). Pero si lo desea, puede definir uno para sus necesidades. Las buenas noticias son que esta nueva function sizeof funciona como se esperaba con su matriz.

 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 

Necesita todas las versiones de la function sizeof para get el tamaño de una variable y get el tamaño correcto de un tipo de datos y de una matriz.

Si solo define la segunda function, entonces sizeof (UInt8.self) y sizeof (Bool.self) dará como resultado "8". Si solo define las dos primeras funciones, then sizeof (testArray) dará como resultado "8".