如何在 SwiftUI 中 Apple 文件应用程序的文件夹中写入文件?

gar*_*ong 3 ios swift swiftui

我按照 Swift 项目UsingFiles github及其视频在我的 SwiftUI 项目中编写文件。项目UsingFiles可以向Files APP写入文件,然后在Files APP中可以看到写入的文件。但我按照如下代码操作,文件APP中看不到文件。

\n\n
let file = "\\(UUID().uuidString).txt"\nlet contents = "Some text..."\n\nlet dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!\nlet fileURL = dir.appendingPathComponent(file)\n\ndo {\n    try contents.write(to: fileURL, atomically: false, encoding: .utf8)\n}\ncatch {\n    print("Error: \\(error)")\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用文件写入文件是file:///Users/fmac/Library/Developer/CoreSimulator/Devices/11111111-881E-488A-9571-E61B83EB6062/data/Containers/Data/Application/11111111-AF89-4B15-B3B5-E13A63A19F8D/Documents/E018F056-83EA-4D70-87C4-16F755AA404A.txt.

\n\n

我的写作文件是file:///Users/fmac/Library/Developer/CoreSimulator/Devices/11111111-881E-488A-9571-E61B83EB6062/data/Containers/Data/Application/11111111-B191-4ACD-98B1-004E619C2EC7/Documents/C9E0F52E-040F-4647-94A3-88E0DA171AB5.txt

\n\n

我可以在目录中找到UsingFiles的写入文件,UsingFiles如下:\n在此输入图像描述

\n\n

但我在 SwiftUI 项目的 Files APP 中找不到写入文件。SwiftUI 中的代码有问题吗?为什么我在Files APP\xef\xbc\x9f中找不到写入文件

\n

小智 5

我使用 UIActivityViewController 在手机上保存文件。它简单且有效。

import SwiftUI

struct ContentView: View {

    var body: some View {
        Button(action: wirtieFile) {
            Image(systemName: "square.and.arrow.up")
        }
    }

    func wirtieFile() -> Void{
        let file = "test.txt"
        let dir = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(file)
        let contents = "test..."
        do {
           try contents.write(to: dir!, atomically: true, encoding: .utf8)
        } catch {
           print(error.localizedDescription)
        }
        var filesToShare = [Any]()
        filesToShare.append(dir!)
        let av = UIActivityViewController(activityItems: filesToShare, applicationActivities: nil)
        UIApplication.shared.windows.first?.rootViewController?.present(av, animated: true, completion: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)