Swift使用Int32数组的大小

我想获得“sizeof”的数组的长度。 我尝试了一切。 这是错误消息:“[Int32]不能转换为T.Type”

数组必须是Int32。

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

你可以简单地用一个数组获取元素的个数

 let count = testArray.count 

和它的元素的总字节数

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

sizeof与types和sizeofValue与值sizeofValue使用,所以都是

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

编译 。 但是,这给你的struct Array的大小,而不是元素存储的大小。

在使用Swift 3 beta 6的Xcode 8中,没有函数sizeof()。 但是,如果你想,你可以为你的需求定义一个。 好消息是,这个新的sizeof函数如你所期望的那样工作。

 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 

您需要sizeof函数的所有版本来获取variables的大小,并获取数据types和数组的正确大小。

如果你只定义第二个函数,那么sizeof(UInt8.self)和sizeof(Bool.self)将会导致“8”。 如果只定义前两个函数,那么sizeof(testArray)将导致“8”。