swift 3 如何使用 CFArrayCreate

Posted

技术标签:

【中文标题】swift 3 如何使用 CFArrayCreate【英文标题】:swift 3 how to use 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 中崩溃。 【参考方案1】:

你可以的

let cfArray = array as CFArray

【讨论】:

以上是关于swift 3 如何使用 CFArrayCreate的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 3.0 中编写此代码,特别是如何在 swift3 中使用宏?

如何使用关系过滤 NSFetchedResultsController - Swift 3

如何使用 userDefaults 保存打印数组(swift 3)

如何在 Swift 3 中使用 BFTask?

如何在 Swift 3 中使用 UnsafeMutablePointer?

如何在 Swift 3 中使用 NSLocale 获取国家代码