繁体   English   中英

Swift使用sizeof和Int32 Array

[英]Swift use sizeof with Int32 Array

我想用“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一起使用值,所以两者都有

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函数的所有版本,以获取变量的大小并获得数据类型和数组的正确大小。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM