在 Swift 中将 replyToApplicationShouldTerminate 发送到 NSApplication

Sending replyToApplicationShouldTerminate to NSApplication in Swift

这是我的AppDelegate.swift。我从 NSApplication 实现了 applicationShouldTerminate 协议。我给出哪个答案取决于 mainWindowController 中 is.Started 的状态。 (这是来自 Cocoa Programming for OS X 的 SpeakLine 示例:The Big Nerd Ranch Guide 5/e——我正在尝试将示例更进一步并防止程序被允许退出在谈话进行的时候。)

我想做的是将 TerminateReply.TerminateCancel 更改为 TerminateReply.TermianteLater,然后在通话结束时向 NSApplication 发送 replyToApplicationShouldTerminate(true) 信号。现在在 MainControllerWindow.swift class 中,我设置了一个函数来处理语音合成器中的状态变化,这就是我想调用它的地方。

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {


    var mainWindowController: MainWindowController?

    func applicationDidFinishLaunching(aNotification: NSNotification) {

        let mainWindowController = MainWindowController()
        mainWindowController.showWindow(self)
        self.mainWindowController = mainWindowController

    }

    func applicationShouldTerminate(sender: NSApplication) -> NSApplicationTerminateReply {
        if (mainWindowController!.isStarted) {
            return NSApplicationTerminateReply.TerminateCancel
        } else {
        return NSApplicationTerminateReply.TerminateNow
        }
    }

}

麻烦的是,当我把它放在这里时,我得到一个错误。

   var isStarted: Bool = false {
        didSet {
            updateButtons()
            NSApplication.replyToApplicationShouldTerminate(true)
        }
    }

它告诉我不能使用布尔值。它还告诉我,当我尝试输入 YES 时,我不能使用 Objective C bool。我如何告诉 NSApplication 现在可以退出?

我相信你应该改变

NSApplication.replyToApplicationShouldTerminate(true)

NSApplication.sharedApplication().replyToApplicationShouldTerminate(true)

因为 replyToApplicationShouldTerminate 是实例方法而不是 class 方法。

我的两美分 swift 5.x:

        NSApplication.shared.reply(toApplicationShouldTerminate: true)