解放区在住氷翠 緑の閃光
【解放区在住氷翠】デスクトップアプリケーション

【SwiftUI】パネルを利用したファイル保存

2023-02-11

さて、氷翠です。
今回はファイル保存のパネル(ダイアログ)を利用した保存する方法。

それ以外は前の「【Swift】忘れないようにファイル保存の基本」と同じ状態。

iMac M1
メモリ:16GB
MacOS:Ventura 13.1
Xcode:14.2

これを書き込んでいる時にはすでにアプリ自体は1週間を過ぎ、すでにアプリは起動できない状態になっていたがw

今回は、保存自体は前回のものとほぼ同じものだ。なので、その辺は省略。

問題はボタンのアクションの部分だ。

Button("保存") {
    let panel = NSSavePanel()
    panel.message = "保存するファイル名を入力してください"
    panel.directoryURL = URL(fileURLWithPath: "\(NSHomeDirectory())/Desktop")
    if panel.runModal() == .OK {
        // OKが押されたら実行されるプログラム
        fileName = panel.url!
        let saveTextModel = saveTextModel()
        let result = saveTextModel.write(fileName, c: text)
        let alert = NSAlert()
        if result {
            alert.messageText = "保存完了"
        }
        else {
            alert.messageText = "保存失敗"
        }
        alert.runModal()
    }
}

で、これで全部。さすがSwiftui。これだけで完結できるので、非常に楽です。

パネルに関するクラスは「NSSavePanel()」を利用する。「directoryURL」というパラメータで初期に表示するパスを設定している。

その次が、「runModal()」というメソッドで実行させる。その返り値が「.OK」ならきちんとフォルダが選択されたという証拠になるのでif文で判断させる。

そこで保存するクラスを読み込んで、というよりアクティブにする。で、あとは保存するプロセスを実行していく。その結果を「result」って変数を作ってそこに保存。その結果はBool値でその結果によってメッセージを変化させる。で、「NSAlert()」でアラートをだして完了するという感じ。

完全に表示している部分と計算部分と分けて考えるというSwiftuiの考えもだいぶ慣れてきてはいる。しかしその考え方もなかなか難しいところでもある。

コメントを残す

メールアドレスが公開されることはありません。