Несколько быстрых вещей, которые нужно отметить, прежде чем мы найдем возможное решение ...
let StationData = NSDictionary(contentsOfFile: myPlist)
//get raw data
myRawData = StationData as!Dictionary
//print (myRawData)
//get data from first key
let Stations:[String:NSObject] = StationData as! Dictionary
Эти три строки можно сжать до
let stationData = NSDictionary(contentsOfFile: myPlist) as? [String: Any]
Я бы порекомендовалиспользуя вместо этого защитное утверждение вместо принудительного развертывания с !
.
guard let stationData = NSDictionary(contentsOfFile: myPlist) as? [String: Any] else {
print("[DEBUG] - station data was not set")
return
}
Во-вторых, я не думаю, что списки свойств предназначены для использования в качестве хранилища данных.Лично у меня будет файл JSON с этой информацией, но это зависит от личных предпочтений.
Как только вы получите свой словарь из списка.То, что вы пытаетесь сделать, на самом деле очень просто.вместо того, чтобы перебирать весь словарь.Просто выберите часть, с которой вы хотите работать.
if let item2 = stationData["item 2"] as? [String: Any] {
// process item 2
}
Вот код, который у меня есть на игровой площадке, которая работает:
guard let myPlist = Bundle.main.path(forResource: "Property List", ofType: "plist") else {
print("[DEBUG] - myPlist not found")
return
}
guard let stationData = NSDictionary(contentsOfFile: myPlist) as? [String: Any] else {
print("[DEBUG] - station data not loaded")
return
}
if let item2 = stationData["item 2"] as? [String: Any] {
for (key, value) in item2 {
print("\(key) \(value)")
}
} else {
print("[DEBUG] - item 2 not loaded")
}