【问题标题】:swift 3 how to use CFArrayCreateswift 3 如何使用 CFArrayCreate
【发布时间】:2016-09-26 21:12:33
【问题描述】:

我想从一个数组创建一个 CFArray

以前在 Swift 2 中,我可以这样做:

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

现在在 Swift 3 中,CFArrayCreate 期望 UnsafeMutablePointer&lt;UnsafeRawPointer?&gt;! 作为第二个参数

我尝试这样做的一种方法是:

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)
}

然而,这将使用 [value of rawPointer,garbage,garbage,garbage] 而不是 [0, 1, 2, 3] 的元素创建 CFArray

我将如何将这个 UnsafeMutablePointer&lt;UnsafeRawPointer?&gt;! 参数从数组中取出?

【问题讨论】:

  • 您确定您的 Swift 2 代码与您使用的完全相同。使用指针时,微小的差异会导致很大的差异。请重新检查,代码在我的 Xcode 7.3.1 的 Playground 中崩溃。

标签: swift3 unsafe-pointers unsafemutablepointer


【解决方案1】:

你可以的

let cfArray = array as CFArray

【讨论】:

    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 2015-11-13
    • 2017-02-17
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多