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()
メソッドでアプリを終了できます。