본문 바로가기

Swift

스위프트에서 CFDictionary 사용하기

사실 아직도 이해하고 있지 못 하는 코드이기도 하다.

Objective-C에서는 단 2~3줄 코딩으로 해결되는 것을 스위프트에서는 왜 이렇게 코딩하는 것인지 모르겠다.

(물론 내가 다른 값을 추가하긴 했지만..)


        /*
         NSDictionary *options = @{(id)kCVPixelBufferCGImageCompatibilityKey: @YES,
         (id)kCVPixelBufferCGBitmapContextCompatibilityKey: @YES};
        */
        // stupid CFDictionary stuff
        let cfnumPointer = UnsafeMutablePointer<unsafepointer<void>>.alloc(1)
        let cfnum = CFNumberCreate(kCFAllocatorDefault, .IntType, cfnumPointer)
        let keys: [CFStringRef] = [kCVPixelBufferCGImageCompatibilityKey, kCVPixelBufferCGBitmapContextCompatibilityKey, kCVPixelBufferBytesPerRowAlignmentKey]
        let values: [CFTypeRef] = [kCFBooleanTrue, kCFBooleanTrue, cfnum]
        let keysPointer = UnsafeMutablePointer<unsafepointer<void>>.alloc(1)
        let valuesPointer =  UnsafeMutablePointer<unsafepointer<void>>.alloc(1)
        keysPointer.initialize(keys)
        valuesPointer.initialize(values)

        let options = CFDictionaryCreate(kCFAllocatorDefault, keysPointer, valuesPointer, keys.count, nil, nil)

CVPixelBuffer를 사용하기 위해 꼭 필요한 코드 부분이다.