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

【SwiftUI】忘れないようにファイル読み込みの基本

2023-01-17

氷翠です。

今回は前回に引き続きファイル関連ということで、テキストファイルの内容を読み込むというもの。前回と同じ設定をしておき、あとはプログラミングしていく。

今回のデザインは更に単純なものにする。

import SwiftUI

struct ContentView: View {
    @ State var sampleText: String = "ここにデータが読み込まれます"
    
    let fr = fileReadModel()
    
    var body: some View {
        VStack {
            Button("テキストファイルの読み込み") {
                sampleText = fr.readData()
            }
            TextEditor(text: $sampleText)
        }
        .padding()
    }
}

ということで、プログラミングはこんな感じで簡素なものだ。

読み込むためトリガーになるボタンと、内容を表示するための「texteditor」。このTexteditorに内容が代入されることになる変数「sampleText」を設定しておく。

ボタンのアクションにはsampleTextに読み込んだデータを代入するというもの。

上の方で「let fr = fileReadModel()」というのがあるが、これはテキストファイルを読み込むクラスを設定しておく。そこでボタンの中のアクションにある「sampleText = fr.readData()」ということで、frのメソッド「readData()」を呼び出す。その返り値が「sampleText」に代入される。と同時に画面に表示されるようになります。

では次にそのクラス「fileReadModel()」です

import Foundation

class fileReadModel: ObservableObject {
    
    let fm = FileManager.default
    
    func readData() -> String {
        var output = ""
        guard let path = fm.urls(for: .desktopDirectory, in: .userDomainMask).first else {
            fatalError("URL取得失敗")
        }
        let fullURL = path.appendingPathComponent("sample.txt")
        do {
            output = try String(contentsOf: fullURL, encoding: .utf8)
        } catch {
            output = "読み込み失敗"
        }
        return output
    }
}

前回と同じように「ObservableObject」が設定されている。更に「let fm = FileManager.default」で短縮形を用意しておきます。

前回のファイルを保存するときと同じようなプログラムですが、違うのが「output = try String(contentsOf: fullURL, encoding: .utf8)」この部分。変数「output」に代入していますが、UTF-8のエンコードで大丈夫でしょう。

コメント:2件

  • まだswiftuiでアプリを作り始めた素人です。
    1. sample.txtは、テキストエディタで作成してdesktopに登録
    2.実行したら読み込み失敗と表示された。
    3.チェックのため
    let fullURL = path.appendingPathComponent(“sample.txt”)
    の後に
    if FileManager.default.fileExists(atPath: fullURL.path) {
    // ファイルが存在する場合の処理
    print(“sample.txtが存在します。”) }
    で確認したら存在します。と表示
    以上ですが、教えていただけると有り難い。
    忙しいなかおねがいします。

    投稿日:2023/09/07(木) 17:45:54

    名前:髙橋 和夫

    • 自分も素人ですw
      もちろん、これだけの情報ですと、まだはっきりとした回答はできませんが、
      ファイルそのものが読み込み出来ない状態にあるとか、権限がないなど
      また、その作成したURL型をコンソールに出力して、パスを確認してみてはいかがでしょうか?

      自分で失敗していた時は、「file://」がなかったり、大文字小文字がおかしかったりしていたときもあったので、
      そんなほんのちっちゃいミスに気付かなかったりします。

      URL型で宣言しておいて、上記の「file://」がないこともありましたので、いろいろとコンソールで確認してみてはいかがでしょうか。

      投稿日:2023/09/08(金) 08:11:00

      名前:IceGreen

コメントを残す

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