>

나는 "sizeof"로 배열의 길이를 얻고 싶다. 나는 모든 것을 시도했다. "[Int32]는 T.Type으로 변환 할 수 없습니다"라는 오류 메시지입니다.

배열은 Int32 여야합니다.

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


  • 답변 # 1

    배열의 요소 수는 간단히

    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 의 크기를 제공합니다 크기가 아닌 Swift 3 베타 6을 사용하는 Xcode 8에는 () 함수 크기가 없습니다. 그러나 원하는 경우 필요에 따라 정의 할 수 있습니다. 다행 인 것은이 새로운 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"이됩니다.

관련 자료

  • 이전 wpf - Windows 클래식 테마에서 비활성화 된 목록 상자의 배경색 변경
  • 다음 .net - 구문에 대한 LINQ2SQL LIKE 명령