[英]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.