使用swift

时间:2016-01-06 17:52:37

标签: ios swift plist

我有两个变量叫做#34;国家"和"地方"我试图读取Data.plist并检索一些值

这是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"))!

你能帮我解决这个问题吗? 提前谢谢。

1 个答案:

答案 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")
}
相关问题