我正在学习斯威夫特。如何修复以下代码以列出窗口名称?
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
如果您避免使用 Core Foundation 类型和方法,并尽早将值桥接到原生 Swift 类型,这会变得更容易。
在这里,CGWindowListCopyWindowInfo()
返回一个可选CFArray
的CFDictionaries
,并且可以桥接到相应的 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] 删除。
我来说两句