如何在不制作临时副本的情况下使用 SwiftUI DocumentGroup 读取大文件?

How to read large files using SwiftUI DocumentGroup without making a temporary copy?

我制作了一个 SwiftUI DocumentApp,它可以读取大型媒体文件但不需要写入它们。在我的文档中,我只想存储文件的 URL,以便我可以使用例如加载它AVAudio 文件。如果不创建文件的临时副本,我无法弄清楚如何执行此操作,正如作者所做的那样 here, because there is no way to the file URL from the fileWrapper

我试图使用 configuration.file.regularFileContents(数据)创建一个管道,但到目前为止我没有成功地从该管道读取数据。

  init(configuration: ReadConfiguration) throws {
    let tempURL = makeTemporaryFileURL()
    FileManager.default.createFile(atPath: tempURL.path, contents: configuration.file.regularFileContents, attributes: nil)
    audioFileUrl = tempURL
  }

您可以通过文档配置获取fileURL,如

@main
struct MyApp: App {
    var body: some Scene {
        DocumentGroup(viewing: MyDocument.self) { fileConfig in
            // here fileConfig has `fileURL` of opened document, so 
            MyViewer(content: fileConfig.document, url: fileConfig.fileURL)
        }
    }
}

backup