Swift

Swift: exit(0)

アプリが自分で強制終了するより、ユーザに選択してもらうのが筋なのでしょうね。

macOSはアプリが消えて無くなるのは、マナー違反です。強制終了とQuitはユーザが決めます。

しかし、アプリ自ら消えて無くなりたいとき、exit(0)と書きたくなります。Single windowの場合、それでもいいケースがあるようですが、後々、どうしてexit(0)なんか使ったのだろうと考え込むことになります。

それで、applicationShouldTerminateあたりを直接呼び出せないか、考えるのですが、次が出てきません。それで、NSApplication.shared().terminate(self) に最後には行き着きます。

注記: Swift4 (Xcode9.0)では、NSApplication.shared.terminate(self)になるようです。

これで、出口はひとつになり、すっきりします。出口でファイルの保存などの後処理をしてから

func applicationShouldTerminate(_ sender:NSApplication) -> NSApplicationTerminateReply {
        ExecSaveArchive() //ファイルをsaveする。
        return  .terminateNow 
    }            

func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool
        ExecSaveArchive()//ファイルをsaveする。
        return false//trueを返すと、アプリがterminateする。
    }

Categories: Swift, 技術

Tagged as: ,