在 SwiftUI 中使用 FileManager 列出文档

Posted

技术标签:

【中文标题】在 SwiftUI 中使用 FileManager 列出文档【英文标题】:List documents using FileManager in SwiftUI 【发布时间】:2020-12-17 13:02:21 【问题描述】:

我正在尝试列出我添加到我的 Xcode 项目中的所有 pdf 文档。我有一个单独的函数,它获取所有扩展名为 pdf 的文档,然后在函数内附加一个 files 变量。然后我尝试使用@State 访问files,然后列出数组中的所有项目,但我不确定如何访问函数中的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)
    

【问题讨论】:

函数名以小写开头 【参考方案1】:

添加退货

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

【讨论】:

谢谢,我在使用return files 时收到此错误Cannot convert return expression of type '[String]' to return type 'Array&lt;URL&gt;'。另外我如何访问@State var files中的变量?

以上是关于在 SwiftUI 中使用 FileManager 列出文档的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 FileManager 在 iOS 中写入文件?

如何在 swift 中使用 fileManager.unmountVolume

FileManager 文件将保存多少数据?

iOS 中 FileManager 的内容在哪里?

FileManager.contentsEqual 在比较复制的文件时返回 false

在没有编辑器的情况下使用 Laravel-filemanager