当 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 }
}
我想检查我的文档目录中是否有特定用户名的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 }
}