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

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次