我希望得到一个带有" sizeof"的数组的长度。我尝试了一切。这是错误消息:" [Int32]无法转换为T.Type"
数组必须是Int32。
var testArray: [Int32] = [2000,400,5000,400]
var arrayLength = sizeof(testArray)
答案 0 :(得分:19)
您只需使用
即可获得数组中的元素数量let count = testArray.count
以及
的元素总字节数var arrayLength = testArray.count * sizeof(Int32)
// Swift 3:
var arrayLength = testArray.count * MemoryLayout<Int32>.size
sizeof
用于类型,sizeofValue
用于值,因此
var arrayLength = sizeof([Int32])
var arrayLength = sizeofValue(testArray)
将编译。但是这会给你struct Array
的大小,而不是大小
元素存储。
答案 1 :(得分:2)
在带有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函数的所有版本,以获取变量的大小并获得数据类型和数组的正确大小。
如果你只定义第二个函数,那么sizeof(UInt8.self)和sizeof(Bool.self)将导致&#34; 8&#34;。如果您只定义前两个函数,那么sizeof(testArray)将导致&#34; 8&#34;。