[英]Get the Contents of multiple files in directory
我需要從多個plist
文件中獲取內容並將它們放入一個dictionary
,然后將其顯示在tableView
使用此代碼,我可以手動獲取每個路徑和文件的內容,但我需要能夠對目錄中的所有 plist 文件執行此操作,而不僅僅是這些預定義的文件。
func getFiles() {
let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let path = documentDirectory.appending("/MainFolder/File1.plist")
let path1 = documentDirectory.appending("/MainFolder/File2.plist")
let path2 = documentDirectory.appending("/MainFolder/File3.plist")
tableViewData = [NSDictionary(contentsOfFile: path) as! [String : String], NSDictionary(contentsOfFile: path1) as! [String : String], NSDictionary(contentsOfFile: path2) as! [String : String]]
print(tableViewData)
}
我在我的tableView
顯示tableViewData
,它在自己的行中為我提供每個文件的內容。
我猜我可能需要一個由.plist
過濾的文件 url 數組,然后以某種方式將每個文件的內容放入[String : String]
字典中。
我是 swift 的新手,任何幫助或更好的方法都會很棒
您可以讀取所有 plist 並遍歷它們,將它們的內容添加到 1 個數組或已保存的字典中。
do {
let directoryContents = try FileManager.default.contentsOfDirectory(at: documentDirectory, includingPropertiesForKeys: nil, options: [])
let allPlistFiles = directoryContents.filter{ $0.pathExtension == "plist" }
var aPlistArray = []
for aPlist in allPlistFiles {
aPlistArray.append(NSDictionary(contentsOfFile: path) as! [String : String])
}
} catch {
print(error)
}
首先,不要在 Swift 中使用過時和客觀的NSSearchPathForDirectoriesInDomains
。 使用現代FileManager
API。
其次,不要使用objective-c-ish NSDictionary(contentsOf
來讀取屬性列表數據。使用PropertyListSerialization
。
函數throws
意味着它將所有可能的錯誤移交給調用者。 它通過plist
擴展過濾目錄中的 URL,並使用map
函數獲取每個 URL 的字典。
func getFiles() throws {
let documentDirectory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let subFolderURL = documentDirectory.appendingPathComponent("MainFolder")
let allFiles = try FileManager.default.contentsOfDirectory(at: subFolderURL, includingPropertiesForKeys: nil)
let properListFiles = allFiles.filter{$0.pathExtension == "plist"}
tableViewData = try properListFiles.compactMap { url -> [String:String]? in
let data = try Data(contentsOf: url)
return try PropertyListSerialization.propertyList(from: data, format: nil) as? [String:String]
}
print(tableViewData)
}
請注意,在沙盒應用程序中, Documents
文件夾位於應用程序容器中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.