当 swift 中我的文档目录中没有可用数据时,想向用户显示一条消息

Want to show user a message when no data available in my document directory in swift

我想检查我的文档目录中是否有特定用户名的pdf文件。通过使用以下代码,我能够做到这一点。但是当文档目录中没有可用数据时,我想向用户显示一条消息。但我无法向用户显示任何消息。如何做到这一点?谁能帮帮我?

private func checkPatientPdfIsPresentOrNot(selectedPatient: String, completion: (_ present: Bool) -> Void){
        if let documentsPathString = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {
           
            let filemanager = FileManager.default
            if let files = filemanager.enumerator(atPath: documentsPathString){
            
            while let file = files.nextObject() {
                let nameWithDate = (file as! String).components(separatedBy: ".")
                let fileName = nameWithDate[0]
                let namewithoutDate = fileName.components(separatedBy: "_")
                let name = namewithoutDate[0]
                
                
                if name == selectedPatient.capitalized{

                    completion(true)
                  
                }
                else{
                    completion(false)
                }
   
            }
                
        }
            else{
                completion(false)
            }
        }
    }

首先,就 Swift 而言,您的代码中有很多过时的 API。

其次,由于整个代码是同步的,因此完成处理程序毫无意义。

主要问题是多次调用完成处理程序。如果部分文件名匹配 selectedPatient 或在循环后传递 false,则应在传递 true 后调用它。

这是一个具有更现代代码和布尔值 return 的建议。

如果方法 returns false

,则向用户显示消息
private func checkPatientPdfIsPresentOrNot(selectedPatient: String) -> Bool {
    let fileManager = FileManager.default
    do {
        let documentsURL = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
        let fileURLs = try fileManager.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: [.nameKey], options: .skipsHiddenFiles)
        return fileURLs.first(where: { url -> Bool in
            let fileName = url.deletingPathExtension().lastPathComponent
            return fileName.components(separatedBy: "_").first == selectedPatient.capitalized
        }) != nil
        
    } catch { print(error); return false }
}