2014-09-07 1 views
8

"sizeof"가있는 배열의 길이를 가져 오려고합니다. 나는 모든 것을 시도했다. 다음과 같은 오류 메시지가 표시됩니다. "[Int32]는 T.Type으로 변환 할 수 없습니다."Swift는 Int32 배열과 함께 sizeof를 사용합니다.

배열은 Int32 여야합니다.

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

답변

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의 크기를 주며, 요소 저장 공간의 크기는 이 아닙니다.

+0

바이트 단위의 배열 길이가 필요합니다. 코드가 컴파일되지 않습니다. – Darx

+0

@Darx : 업데이트 된 답변보기. –

+0

감사합니다. 작품과 나는 행복하다. 2 시간의 낭비 ... 어쨌든 이제는 효과가 있습니다. :) – Darx

1

Xcode 8에서 Swift 3 beta 6에는 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"이됩니다.

관련 문제