首页 > 解决方案 > 在 SwiftUI 中使用 FileManager 列出文档

问题描述

我正在尝试列出我添加到 Xcode 项目中的所有 pdf 文档。我有一个单独的函数,它获取所有带有扩展名的文档,pdf然后files在函数内附加一个变量。然后我尝试使用访问files然后@State列出数组中的所有项目,但我不确定如何访问files函数中的变量然后将其添加到列表中?我哪里错了?

struct PDFList: View {
    
    @State var files = GetFiles()
    
    var body: some View {
        VStack{
            ForEach(0..<files.count, id: \.self) { item in
                Text(files[item])
            }
        }
    }
}

func GetFiles() -> Array<URL> {
    
    var files: [String] = []
    let documentsUrl =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    
    do {
        let directoryContents = try FileManager.default.contentsOfDirectory(at: documentsUrl, includingPropertiesForKeys: nil)
        let pdfFiles = directoryContents.filter{ $0.pathExtension == "pdf" }
        let pdfFileNames = pdfFiles.map{ $0.deletingPathExtension().lastPathComponent }
        
        files.append(contentsOf: pdfFileNames)
    } catch {
        print(error)
    }
}

标签: iosxcodeswiftui

解决方案


添加退货

func getFiles() -> Array<String> {    
  var files: [String] = []
  let documentsUrl =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
 do {
    let directoryContents = try FileManager.default.contentsOfDirectory(at: documentsUrl, includingPropertiesForKeys: nil)
    let pdfFiles = directoryContents.filter{ $0.pathExtension == "pdf" }
    let pdfFileNames = pdfFiles.map{ $0.deletingPathExtension().lastPathComponent } 
    files.append(contentsOf: pdfFileNames)
 } catch {
     print(error)
 }
 return files
}

推荐阅读