
【SwiftUI】忘れないようにファイル読み込みの基本
2023-01-17 21:47
氷翠です。
今回は前回に引き続きファイル関連ということで、テキストファイルの内容を読み込むというもの。前回と同じ設定をしておき、あとはプログラミングしていく。
今回のデザインは更に単純なものにする。
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のエンコードで大丈夫でしょう。
