首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift3.1 - NSApplication.terminate或NSApplication.shared().terminate

Swift3.1 - NSApplication.terminate或NSApplication.shared().terminate
EN

Stack Overflow用户
提问于 2017-05-22 23:21:59
回答 1查看 350关注 0票数 1

使用较旧的样式创建StatusBarMenuItem,这样就可以了。然而,由于一个警告,我确实想更改我的代码符合Swift 3.1,从

代码语言:javascript
运行
复制
menu.addItem(NSMenuItem(title: "Quit terminate", action: Selector(("terminate:")), keyEquivalent: "q" ))

代码语言:javascript
运行
复制
...
menu.addItem(NSMenuItem(title: "Quit quitAction", action: #selector(quitAction), keyEquivalent: "Q"))
...
func quitAction() {
        NSApplication.shared().terminate(self) // works of course
       // NSApplication.terminate(self) // doesn't works of course but works in a selector
    }

然后我发现他们不仅把selector(“terminate:))部分改成了#selector,还把terminate部分改成了

代码语言:javascript
运行
复制
menu.addItem(NSMenuItem(title: "Quit NSAppl.terminate", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q" ))

但是下面的代码也是有效的(注意'.shared()‘部分)

代码语言:javascript
运行
复制
menu.addItem(NSMenuItem(title: "Quit NSAppl.shared.terminate", action: #selector(NSApplication.shared().terminate(_:)), keyEquivalent: "q" ))

但是,当我想从quitAction函数中删除.shared()部分时,我就会得到一个编译器错误。我的问题是:“为什么我可以使用选择器而不是一行代码来去掉shared()部分?”这样做的理由是什么?谢谢。

实际上,问题应该更像这样:“为什么我可以使用选择器插入shared()部分”?

添加的图片

EN

回答 1

Stack Overflow用户

发布于 2017-05-23 00:19:28

语法为Type.method的选择器将method发送到实例,该实例的Typetarget参数中指定。

我假设在macOS中,没有指定目标的选择器会被发送到FirstResponder,而忽略Type。向FirstResponder公开terminate:方法

在代码中,您必须将方法发送到实例,因此shared()是必需的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44116669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档