Swift3.1-NSApplication.terminate或NSApplication.shared().terminate
使用旧样式创建StatusBarMenuItem,效果很好。然而,由于一个警告,我确实想更改我的代码符合Swift 3.1,从Swift3.1-NSApplication.terminate或NSApplication.shared().terminate,swift3,xcode8,Swift3,Xcode8,使用旧样式创建StatusBarMenuItem,效果很好。然而,由于一个警告,我确实想更改我的代码符合Swift 3.1,从 menu.addItem(NSMenuItem(title: "Quit terminate", action: Selector(("terminate:")), keyEquivalent: "q" )) 到 然后我发现他们不仅将选择器(((“terminate:))部分更改为#选择器,而且将terminate部分更改为 menu.addItem(NSMenuIt
menu.addItem(NSMenuItem(title: "Quit terminate", action: Selector(("terminate:")), keyEquivalent: "q" ))
到
然后我发现他们不仅将选择器(((“terminate:))部分更改为#选择器,而且将terminate部分更改为
menu.addItem(NSMenuItem(title: "Quit NSAppl.terminate", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q" ))
但是下面的方法也很有效(注意“.shared()”部分)
但是,当我想从quitAction函数中删除.shared()部分时,会出现一个编译器错误。我的问题是:“为什么我可以使用选择器而不是在代码行中保留shared()部分?”这是什么原因?谢谢
实际上,问题应该更像是“为什么我可以使用选择器插入shared()部分”
附加图像
具有语法
Type.method
的选择器将方法
发送到目标
参数中指定的类型
的实例
我假设在macOS中,没有指定目标的选择器被发送到FirstResponder
忽略类型。方法终止:
暴露给FirstResponder
在代码中,您必须将方法发送到实例,因此需要shared()
。具有语法类型的选择器。方法将方法发送到目标参数中指定的类型的实例
我假设在macOS中,没有指定目标的选择器被发送到FirstResponder
忽略类型。方法终止:
暴露给FirstResponder
在代码中,您必须将方法发送到实例,因此需要shared()
。当您单击“退出NSAppl.shared.terminate”菜单项时,“退出NSAppl.shared.terminate”菜单项是否按预期工作?我怀疑它在运行时会出现“无法识别的选择器”错误是的,所有4种方式都工作正常。没有错误。我将尝试添加一个图像。是否退出NSAppl.shared.terminate“菜单项在您单击它时按预期工作?我怀疑它在运行时会出现“无法识别的选择器”错误是的,所有4种方式都工作正常。没有错误。我将尝试添加图像。
menu.addItem(NSMenuItem(title: "Quit NSAppl.terminate", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q" ))
menu.addItem(NSMenuItem(title: "Quit NSAppl.shared.terminate", action: #selector(NSApplication.shared().terminate(_:)), keyEquivalent: "q" ))