如何在macOS SwiftUI生命周期中关闭/退出我的应用程序?

3

我想知道如何关闭或退出我的应用程序?我有一些关闭应用程序的代码,但这些代码看起来不够现代化和更新到SwiftUI,我们有更好的新代码吗?

import SwiftUI

@main
struct Work_Space_macOSApp: App {
    var body: some Scene {
        WindowGroup {

            VStack {

                Button("Close App") {
                    
                    // Do we have more SwifUI-ish code for closing App?
                    NSApplication.shared.keyWindow?.close()
                }
                
                Button("Quit App") {
                    // How can I quit the app?
                    
                }
                
            }
            .frame(width: 200, height: 200)
        }
    }
}
3个回答

8

终止应用程序:

NSApplication.shared.terminate(nil)

仍有许多AppKit的特性,SwiftUI不支持。


3

我认为你不应该直接终止你的应用程序。使用这个命令当用户关闭最后一个窗口或在编程中关闭时触发终止。

@main
struct SwiftUIApp: App {
    @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    ...

}


class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
        return true
    }
    
}

如果我们使用SwiftUI,您的方法是否更好?我的意思是,您正在定义委托,但SwiftUI不喜欢它。 - ios coder
@swiftPunk 这是苹果的指南,以确保必要的清理工作得以进行。 SwiftUI 似乎并不介意,我只是问了他哈哈! - Duncan Groenewald
这在 Xcode 14 / Ventura 中不再起作用。 - Sébastien Stormacq
@SébastienStormacq - 在我的 SwiftUI/Xcode 14.1/macOS 13 测试中似乎仍然有效。 - Duncan Groenewald

0

使用:

NSApp.terminate(nil)

在某些情况下,例如当您的应用程序是代理时,您不能依赖窗口,因为它们中的大多数要么关闭要么隐藏。这将是终止应用程序的唯一方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接