Как добавить логику Command-Q в Cocoa с Swift?

Я хочу добавить некоторую логику в мое приложение Cocoa, когда пользователь ставит Command-Q, чтобы попытаться выйти из приложения, но как добавить его в Swift?

То, что я хочу сделать, это что-то вроде этого, но это на Objective-C, и когда я попытался перенести его в мое приложение Swift, это не сработает, поскольку похоже, что applicationShouldTerminate больше не доступен в Swift, учитывая, что он не работает Не реагируем на завершение метода в моем Xcode.

Кроме того, когда я пытался написать NSTerminateNow как тот, что был написан на вышеприведенном сообщении, я получил нерешенную ошибку, поэтому NSTerminateNow также ушел в Swift и Xcode 6.

Поэтому, если я хочу добавить некоторую логику после того, как пользователь добавит Command-Q в мое приложение Swift и Cocoa, как я могу реализовать его в Xcode 6? Следует ли мне избежать использования метода applicationShouldTerminate?

2 ответа

Он все еще там, он просто скрывается. Если вы укажете команду NSApplicationDelegate в объявлении делегата приложения, вы увидите все методы, которые она реализует, в том числе:

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

Кажется, что (надеюсь, только сейчас) опционные методы, объявленные в протоколах, не предлагаются автозаполнением.


Тот же метод работает в Swift без проблем:

class AppDelegate: NSObject, NSApplicationDelegate {

 // ...

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

}

licensed under cc by-sa 3.0 with attribution.