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 (林 晃) Representative(代表), Software Engineer(ソフトウェアエンジニア)

アールケー開発代表。Appleプラットフォーム向けの開発を専門としているソフトウェアエンジニア。ソフトウェアの受託開発、技術書執筆、技術指導・セミナー講師。note, Medium, LinkedIn
-
Representative of RK Kaihatsu. Software Engineer Specializing in Development for the Apple Platform. Specializing in contract software development, technical writing, and serving as a tech workshop lecturer. note, Medium, LinkedIn

目次