objective-c - 如何将 Swift 数组转换为 CFArray?

标签 objective-c macos swift

我正在尝试使用 Swift 在 Mac OS X 应用程序中捕获窗口列表。 CGWindowListCreateImageFromArray 函数需要一个 CFArray。我已经尝试了几件事,这是我所拥有的最接近的东西。或者有没有更好的方法来转换数组?

import Cocoa

// Example swift array of CGWindowID's
var windowIDs = [CGWindowID]();
windowIDs.append(1);
windowIDs.append(2);

// Convert to CFArray using CFArrayCreate
let allocator = kCFAllocatorDefault
let numValues = windowIDs.count as CFIndex
let callbacks: UnsafePointer<CFArrayCallBacks> = nil
var values: UnsafeMutablePointer<UnsafePointer<Void>> = nil

/* how do I convert windowIDs to UnsafeMutablePointer<UnsafePointer<Void>> for the values? */

let windowIDsCFArray = CFArrayCreate(allocator, values,  numValues, callbacks);

let capture = CGWindowListCreateImageFromArray(CGRectInfinite, windowIDsCFArray, CGWindowImageOption(kCGWindowListOptionOnScreenOnly));

最佳答案

只要将 CGWindowID 设置为 CFTypeRef,就可以使用数组初始化 UnsafeMutablePointer:

var windows: [CFTypeRef] = [1, 2]
var windowsPointer = UnsafeMutablePointer<UnsafePointer<Void>>(windows)
var cfArray = CFArrayCreate(nil, windowsPointer, windows.count, nil)

关于objective-c - 如何将 Swift 数组转换为 CFArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28947049/

相关文章:

objective-c - UITapGestureRecognizer导致应用崩溃

ios - Objective-C - 从这个 PaintCode 代码创建 UIImage

ios - 什么是 UIApplicationLinkedOnOrAfter,为什么它会杀死我的应用程序?

macos - 恢复 MySQL 备份 : how to specify max packet size in command line

ios - 声明我的 CellClass 以扩展到 UITableViewCell?

ios - 如何给AVAudioSession中的两个类别设置类别

ios - 在 macOS/iPhone 上的 Swift 5 中压缩的数据无法通过其他任何东西解压缩

objective-c - spindump分析说明?

ios - 无法在 Swift 中生成多页 PDF

swift - Xcode 8 安装pod后找不到代码签名