2

I'd like to create a CFArray from an Array

previously in Swift 2, I'm able to do this:

let array = [0, 1, 2, 3]
let arrayPointer = UnsafeMutablePointer<UnsafePointer<Void>>(array)
let cfArray = CFArrayCreate(kCFAllocatorDefault, arrayPointer, array.count, nil)

now in Swift 3 CFArrayCreate is expecting UnsafeMutablePointer<UnsafeRawPointer?>! as the second parameter

one way I attempted to do it is as such:

let array: [Int] = [0, 1, 2, 3]
var rawPointer: UnsafeRawPointer? = UnsafeRawPointer(array)
let cfArray = withUnsafeMutablePointer(to: &rawPointer) { ppArray in
    CFArrayCreate(kCFAllocatorDefault, ppArray, array.count, nil)
}

however this will create CFArray with element of [value of rawPointer, garbage, garbage, garbage] instead of [0, 1, 2, 3]

how would I go about making this UnsafeMutablePointer<UnsafeRawPointer?>! parameter out of the array ?

gietal
  • 129
  • 10
  • Are you sure your Swift 2 code is exactly the same as you have used. A slight difference would result in a big difference when working with pointers. Please re-check it, the code crashes in my Playground of Xcode 7.3.1. – OOPer Sep 27 '16 at 11:36

1 Answers1

3

You can do

let cfArray = array as CFArray
Anatoli P
  • 4,791
  • 1
  • 18
  • 22