簡體   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