一尘不染

如何通过Swift中的URLScheme捕获用于启动OS X应用程序的URL?

swift

我一直在尝试在Swift的Objective-C中复制执行此操作的常用方法,以用于我正在使用的新swift应用程序。

如何在Objective-
C中执行此操作已得到了很好的说明,您将获得共享的Apple事件管理器和调用setEventHandler方法,以将函数注册为kInternetEventClass具有事件id
的事件类的处理程序kAEGetURL

因此,我正在尝试将此代码添加到全新项目中的模板AppDelegate.swift中,以执行相同的操作:

func applicationWillFinishLaunching(aNotification: NSNotification?) {
    var appleEventManager:NSAppleEventManager = NSAppleEventManager.sharedAppleEventManager()
    appleEventManager.setEventHandler(self, andSelector: "handleGetURLEvent:withReplyEvent:", forEventClass: kInternetEventClass, andEventID: kAEGetURL)
}

func handleGetURLEvent(event: NSAppleEventDescriptor?, replyEvent: NSAppleEventDescriptor?) {
    println("yay");
}

据我所知,这只是标准Objective-
c调用的语法转换。但是我forEventClass和方法的andEventId参数都收到类型错误setEventHandler

'NSNumber' is not a subtype of 'AEEventClass'forEventClass论证

和:

'NSNumber' is not a subtype of 'AEEventId'andEventID论证

我不知道我在这个阶段既是做错了kInternetEventClass,并kAEGetURL都通过常量定义的苹果......当然我不要求他们转换NSNumber类型各自需要的类型?如果我是我,我将无法解决。


阅读 285

收藏
2020-07-07

共1个答案

一尘不染

据我从文档中得知,类采用常量并将其转换为正确的类型:

func applicationWillFinishLaunching(aNotification: NSNotification?) {
    var appleEventManager:NSAppleEventManager = NSAppleEventManager.sharedAppleEventManager()
    appleEventManager.setEventHandler(self, andSelector: "handleGetURLEvent:withReplyEvent:", forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL))
}
2020-07-07