SwiftUIでmacOSアプリを作っていて、ウインドウが閉じられたときにアプリを終了する方法について解説します。
目次
WindowGroupを使っているとき
プロジェクト作成時に、Interface
にSwiftUIを指定すると、ウインドウを作成するコードは次のようになっています。
import SwiftUI
@main
struct TerminateOnCloseApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
このコードによって作成されるウインドウのルートビューはContentView
です。ウインドウが閉じられたときというのは、ContentView
が非表示になったときなので、.onDisappear
モディファイアを使って、次のようなコードでウインドウが閉じられたときに、アプリを終了することができます。
import SwiftUI
@main
struct TerminateOnCloseApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.onDisappear {
terminateApp()
}
}
}
private func terminateApp() {
NSApplication.shared.terminate(self)
}
}
アプリを終了させるには
アプリを終了させるには、NSApplication.terminate()
メソッドを使用します。サンプルコードの様にshared
で共有インスタンスを取得して、terminate()
メソッドでアプリを終了できます。