【Swift UI】ファイルの書き込み
概要
テキストファイルに文字列を書き込む
XCodeでプロジェクト作成
XCodeを起動して、[Create a new Xcode project]を選択。
[App]を選択して[Next]をクリック。
[Project Name]に"FileWriter"を入力して[Next]をクリック。
適当なフォルダ(以下A)を選択して[Create]をクリック。
A/FileWriter/FileWriterにXCodeが自動で作成したフォルダ・ファイルが格納されている。
書き込み用のファイルを用意
XCodeの画面のナビゲーター・エリアの[FileWriter]を右クリック(control+クリック)で[New File]を選択。
適当なものを選んで"MyText.txt"を作成する。
FinderでA/FileWriter/FileWriterを見ると"MyText.txt"が作成されている。
ファイル書き込み処理
ContentView.swiftに以下の処理を追加
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Text(writeToFile())
}
}
}
func writeToFile() -> String {
guard let fileURL = Bundle.main.url(forResource: "MyText", withExtension: "txt") else {
return "ファイルが見つかりません"
}
let text = "書き込みFromApp"
do {
let fileHandle = try FileHandle(forWritingTo: fileURL)
fileHandle.seetToEndOfFile()
fileHandle.write(text.data(using: String.Encoding.utf8))
// fileHandle.close() // 不要
} catch {
return error.localizedDescription
}
return "書き込み成功"
}
struct ContentView_Previews: PreviewProvider {
static var preview: some View {
ContentView()
}
}
ファイルの確認
上記のコードが正常に終了していることを確認するために、[Content View]を開く。
"書き込み成功"が表示されている。
しかし、ナビゲーター・エリアの"MyText.txt"をクリックして内容を表示すると何も書き込まれていない。
writeToFile()のfileURL取得後にreturn fileURL.absoluteStringを追加する。
これによって、[Content View]には書き込みを行った"MyText.txt"のパスが表示される。
書き込まれたファイル
ファイルパスは"Users/XX/Library/.../MyText.txt"となっている。
つまり"A/FileWriter/FileWriter/MyText.txt"とは別のファイルに対して操作が行われている。
これはXCodeが持っているシミュレータのパスで、シミュレータに"A/FileWriter/FileWriter/MyText.txt"が転送されているためである。
書き込まれた内容の確認
【Swift UI】ファイルの読み込み - おっさんの備忘録
上記を参照して、書き込み内容を確認すると、書き込みFromAppが4回書き込まれている。