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をコピーしました!

この記事を書いた人

Akira Hayashiのアバター Akira Hayashi 代表・ソフトウェアエンジニア

アプリ開発が好きなアプリ開発者。このブログは学習メモを記事にしたテックブログです。仕事ではアプリ開発をメインに、技術書の執筆やセミナーの講師などもしています。業務や著書のサイトはこちらです→ アールケー開発

目次