我一直在尝试在Swift的Objective-C中复制执行此操作的常用方法,以用于我正在使用的新swift应用程序。
如何在Objective- C中执行此操作已得到了很好的说明,您将获得共享的Apple事件管理器和调用setEventHandler方法,以将函数注册为kInternetEventClass具有事件id 的事件类的处理程序kAEGetURL。
setEventHandler
kInternetEventClass
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:
forEventClass
andEventId
'NSNumber' is not a subtype of 'AEEventClass'为forEventClass论证
'NSNumber' is not a subtype of 'AEEventClass'
和:
'NSNumber' is not a subtype of 'AEEventId'为andEventID论证
'NSNumber' is not a subtype of 'AEEventId'
andEventID
我不知道我在这个阶段既是做错了kInternetEventClass,并kAEGetURL都通过常量定义的苹果......当然我不要求他们转换NSNumber类型各自需要的类型?如果我是我,我将无法解决。
NSNumber
据我从文档中得知,类采用常量并将其转换为正确的类型:
func applicationWillFinishLaunching(aNotification: NSNotification?) { var appleEventManager:NSAppleEventManager = NSAppleEventManager.sharedAppleEventManager() appleEventManager.setEventHandler(self, andSelector: "handleGetURLEvent:withReplyEvent:", forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL)) }