如何将Swift数组转换为CFArray?

iam*_*sed 3 macos objective-c 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));
Run Code Online (Sandbox Code Playgroud)

kel*_*ket 5

UnsafeMutablePointer只要将CGWindowIDs 设置为CFTypeRef:s,就可以初始化数组:

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