Objective c 如何从Swift使用AXUIElementCopyAttributeValue?

Objective c 如何从Swift使用AXUIElementCopyAttributeValue?,objective-c,swift,Objective C,Swift,我正在尝试使用来自Swift的AXUIElementCopyAttributeValue。我最好的刺现在看起来像这样: private func mainWindow() -> Optional<AXUIElementRef> { let appRef = AXUIElementCreateApplication(self.pid()) var ptr: Unmanaged<AXUIElementRef>? = nil var frontWi

我正在尝试使用来自Swift的AXUIElementCopyAttributeValue。我最好的刺现在看起来像这样:

private func mainWindow() -> Optional<AXUIElementRef> {
    let appRef = AXUIElementCreateApplication(self.pid())
    var ptr: Unmanaged<AXUIElementRef>? = nil
    var frontWindow: AXUIElementRef? = nil
    let err = AXUIElementCopyAttributeValue(appRef, kAXMainWindowAttribute, &ptr)
    if err == AXError(kAXErrorSuccess) {
        frontWindow = ptr!.takeRetainedValue()
    }
    return frontWindow
}
private func main window()->可选{
让appRef=AXUIElementCreateApplication(self.pid())
var ptr:非托管?=nil
var frontWindow:AXUIElementRef?=nil
让err=AXUIElementCopyAttributeValue(appRef、kAXMainWindowAttribute和ptr)
如果err==AXError(kAXErrorSuccess){
frontWindow=ptr!.takeRetainedValue()
}
返回前窗
}
不幸的是,kAXMainWindowAttribute不在范围内。当然,这在ObjC中是有效的,但我无法找出从Swift访问时该值隐藏在哪里。这也不是我第一次遇到这个问题,尽管以前我能偶尔发现它


此外,我很高兴在这里收到任何风格上的建议。我不相信我是以最自然的方式为斯威夫特这样做的。

这还不是一个答案,但也许有人能帮我找到答案。。。为了取得进展,我将代码更改为:

func mainWindow() -> WBWindow? {
    var result: WBWindow? = nil
    var ptr: Unmanaged<AnyObject>?
    let kAXMainWindow: CFString! = "AXMainWindow" as NSString
    let appRef: AXUIElement! = AXUIElementCreateApplication(self.pid()).takeRetainedValue()

    let err = AXUIElementCopyAttributeValue(appRef, kAXMainWindow, &ptr)
    if err == AXError(kAXErrorSuccess) {
        let val: AnyObject? = ptr?.takeRetainedValue()
        if val != nil {
            let value: AnyObject = val!
            let description = CFCopyTypeIDDescription(CFGetTypeID(value))
            println("type = \(description)")
        }
        else {
            NSLog("got nil result")
        }
//      result = WBWindow(element: ptr?.takeRetainedValue() as? AXUIElement)
    }
    return result
}
我在上面添加了调试代码,并生成:

类型=AXUIElement

苏好。这是一个AXUIElement,它不会转换为一个?很明显我遗漏了一些明显的东西

0x1001b57ea:  leaq   0x3f1a1(%rip), %rax       ; "Swift dynamic cast failed"