列出 Swift 中的所有窗口名称

肖恩勒布朗

我正在学习斯威夫特。如何修复以下代码以列出窗口名称?

import CoreGraphics

let windows = CGWindowListCopyWindowInfo(CGWindowListOption.optionAll, kCGNullWindowID)
for i in 0..<CFArrayGetCount(windows) {
  if let window = CFArrayGetValueAtIndex(windows, i) {
    print(CFDictionaryGetValue(window, kCGWindowName))
  }
}

错误:

main.swift:6:32: error: cannot convert value of type 'UnsafeRawPointer' to expected argument type 'CFDictionary?'
    print(CFDictionaryGetValue(window, kCGWindowName))
                               ^~~~~~
                                      as! CFDictionary
马丁·R

如果您避免使用 Core Foundation 类型和方法,并尽早将值桥接到原生 Swift 类型,这会变得更容易。

在这里,CGWindowListCopyWindowInfo()返回一个可选CFArrayCFDictionaries,并且可以桥接到相应的 Swift 类型[[String : Any]]然后你可以使用通常的 Swift 方法(数组枚举和字典下标)访问它的值:

if let windowInfo = CGWindowListCopyWindowInfo(.optionAll, kCGNullWindowID) as? [[ String : Any]] {
    for windowDict in windowInfo {
        if let windowName = windowDict[kCGWindowName as String] as? String {
            print(windowName)
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章