The Util Designer
SwiftUI 使用FileManager讀取和保存檔案的方法
xcode 13.4.1, swift 5.5, iOS 15.4
2022-09-06
在 iOS 中每個 App 中有個sandbox機制來保存和讀取檔案,以避免存取到其他App的內容,這次來講講如何使用 FileManager 來定位目錄位置和存取檔案。
1. 使用FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]可以定位到sandbox的documents的目錄 (當然你可以用playground來做):
import SwiftUI

struct ReadFileExample: View {
    var body: some View {
        VStack {
            Text("Data")
        }
        .onAppear {

            let sandboxDocumentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
            print(sandboxDocumentURL)
        }
    }
}
2. 在得到sandboxDocumentURL後,再添加檔案名稱File和檔案擴展名data,檔案完整名稱就是File.data,先把字符串內容寫到fileURL,再讀出來放到content中,然後再 App 中的Text顯示出來:
import SwiftUI

struct ReadFileExample: View {
    @State var content : String = "Data"
    var body: some View {
        VStack {
            Text(content)
        }
        .onAppear {

            let sandboxDocumentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
            let fileURL = sandboxDocumentURL.appendingPathComponent("File").appendingPathExtension("data")
            do {
                try "ONE\nTWO".write(to: fileURL, atomically: true, encoding: .utf8)
                content = try String(contentsOf: fileURL, encoding: .utf8)
            } catch let error {
                print(error)
            }
        }
    }
}