【问题标题】:How to add Command-Q logic in Cocoa with Swift?如何使用 Swift 在 Cocoa 中添加 Command-Q 逻辑?
【发布时间】:2014-07-01 14:04:45
【问题描述】:

当用户按下 Command-Q 试图退出应用程序时,我想在我的 Cocoa 应用程序中添加一些逻辑,但是如何在 Swift 中添加它?

我想要做的是类似于this,但这是在 Objective-C 上,当我尝试将它移植到我的 Swift 应用程序时,它没有成功,因为它看起来像 applicationShouldTerminate 不再可用在 Swift 中,因为它不会对我的 Xcode 中方法的完成做出反应。

另外,当我尝试像上面帖子中写的那样写 NSTerminateNow 时,我得到了一个未解决的错误,所以 NSTerminateNow 在 Swift 和 Xcode 6 中也消失了。

所以如果我想在用户将 Command-Q 放入我的 Swift 和 Cocoa 应用程序后添加一些逻辑,我该如何在 Xcode 6 中实现它?我应该避免使用applicationShouldTerminate 方法吗?

【问题讨论】:

    标签: cocoa swift xcode6


    【解决方案1】:

    同样的方法在 Swift 中运行没有问题:

    class AppDelegate: NSObject, NSApplicationDelegate {
    
        // ...
    
        func applicationShouldTerminate(sender: NSApplication!) -> NSApplicationTerminateReply {
            let shouldTerminate = ... // Should I stay or should I go?
            return shouldTerminate ? .TerminateNow : .TerminateCancel
        }
    
    }
    

    【讨论】:

    • 当我点击命令 Q 时方法没有调用。
    【解决方案2】:

    它还在那里,只是隐藏起来。如果您在应用代理的声明中单击 NSApplicationDelegate 命令,您可以看到它实现的所有方法,包括:

    func applicationShouldTerminate(sender: NSApplication!) -> NSApplicationTerminateReply {
        // stuff and return stuff    
    }
    

    似乎(希望只是现在)协议中声明的可选方法不被自动完成建议。

    【讨论】:

    • 感谢您提供有关检查所有方法声明的信息!我的错误是按原样定义NSTerminateNow - 正如Martin R所建议的那样,它应该是.TerminateNow,这导致了第二个问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 2019-07-23
    相关资源
    最近更新 更多