我有两个变量叫做#34;国家"和"地方"我试图读取Data.plist并检索一些值
这是Data.plist:
我无法从变量中读取plist。
让我们举例说,国家的价值是" Italia"并且Places的值是"那不勒斯",如何检索"项目0"中写的两个不同的值;和"项目1"。
我一直在互联网上搜索一些可以帮助我的教程,但我无法使这些工作适用于我的情况(我使用了更多的教程示例,但由于我的声誉很低,我可以&#39 ; t发布超过2个链接)。
我尝试按照这些教程进行操作:
Swift - searching through dictionaries in an array in a plist
http://sweettutos.com/2015/06/03/swift-how-to-read-and-write-into-plist-files/
例如,我尝试使用此代码而不使用"变量",但即使这样也无效:
let path = NSBundle.mainBundle().pathForResource("Dati", ofType: "plist")
let dict = NSDictionary(contentsOfFile: path!)
let value: AnyObject = (dict!.objectForKey("Italia")!.objectForKey("Naples")?.objectForKey("Item 0"))!
你能帮我解决这个问题吗? 提前谢谢。
答案 0 :(得分:0)
这是一个仅使用Swift原生类型的纯Swift解决方案:
if let url = NSBundle.mainBundle().URLForResource("Dati", withExtension: "plist"), data = NSData(contentsOfURL: url) {
do {
let dictionary = try NSPropertyListSerialization.propertyListWithData(data, options: [], format: nil) as! [String:AnyObject]
if let city = dictionary["Italia"]?["Naples"] as? [AnyObject] {
let item0 = city[0] as! Int
let item1 = city[1] as! String
} else {
print("Italia or Naples doesn't exist")
}
} catch let error as NSError {
print("Property List Serialization Error: \(error)")
}
} else {
fatalError("File couldn't be read")
}
如果您将plist文件更改为仅使用String
值,则可以避免某些类型转换
if let url = NSBundle.mainBundle().URLForResource("Dati", withExtension: "plist"), data = NSData(contentsOfURL: url) {
do {
let dictionary = try NSPropertyListSerialization.propertyListWithData(data, options: [], format: nil) as! [String:[String:[String]]]
if let city = dictionary["Italia"]?["Naples"] {
let item0 = city[0]
let item1 = city[1]
} else {
print("Italia or Naples doesn't exist")
}
} catch let error as NSError {
print("Property List Serialization Error: \(error)")
}
} else {
fatalError("File couldn't be read")
}