@NSApplicationMain
的Swift documentation读取:
使用此属性相当于调用 NSApplicationMain(: :)函数并将此类的名称作为传递 委托类的名称。
但NSApplicationMain
签名只收到argc
和argv
,无法通过"类名"它。在互联网上,我找到了两个"例子"如何使用@NSApplicationMain
等价物。首先只需调用NSApplicationMain
:
NSApplicationMain(Process.argc, Process.unsafeArgv)
第二个创建共享应用程序单例并将委托设置为它:
NSApplication.sharedApplication()
NSApp.delegate = AppDelegate()
NSApplicationMain(Process.argc, Process.unsafeArgv)
令人惊讶的是,向导创建的应用程序适用于两个版本(使用ex delegate,我可以从NSLog
开始)!怎么会这样?对于osx应用程序,可能会忽略委托,并且始终使用main nib file
中指定的委托。或者,NSApplicationMain
和UIApplicationMain
我还能掌握一些隐藏的逻辑?任何提示?
答案 0 :(得分:2)
是的,那里的文档似乎不太正确。我建议filing a bug,以便他们知道修复文档。
设置Cocoa应用程序的传统方法是这样的:
NSApplication
或其子类)MainMenu.nib
(或xib
)文件包含应用委托类的实例NSApplicationMain
致电main
,并使用步骤1和2中的信息设置您的应用。您也可以在C main
中以编程方式执行此操作,如您在问题中所示。
Swift @NSApplicationMain
指令自动处理启动应用程序,并将委托设置为您应用该指令的类(因此您不再需要nib来设置委托,也不需要设置委托)编程)。