SwiftUIでウインドウを閉じたときにアプリを終了する方法

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

スポンサーリンク
最新情報をチェックしよう!