如何从Swift 3中的数据中读取属性列表

时间:2016-09-29 16:21:31

标签: swift nsdata swift3

我正在尝试从Swift 3中的property list读取Data,但我无法实现这一点。

我尝试过这样的事情:

let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data!, options: [PropertyListSerialization.ReadOptions], format: nil) as! Dictionary

我得到了这个错误:

  

无法将'PropertyListSerialization.ReadOptions.Type'类型的值(又名'PropertyListSerialization.MutabilityOptions.Type')转换为预期的元素类型'PropertyListSerialization.MutabilityOptions'

然后我像往常一样在Swift 1.2上尝试过这样的事情:

let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data!, options: [PropertyListSerialization.MutabilityOptions.immutable], format: nil) as! Dictionary

我收到了这个错误:

  

'immutable'不可用:使用[]构造一个空选项集

然后我尝试了这个:

let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data!, options: [], format: nil) as! Dictionary

我收到了这个错误:

  

'[Any]'不能转换为'PropertyListSerialization.ReadOptions'(又名'PropertyListSerialization.MutabilityOptions')

如何从“Swift 3中的数据”中读取property list文件或者执行此操作的方法是什么?

3 个答案:

答案 0 :(得分:8)

Dictionary是一种泛型类型,需要键和值的类型信息。

使用Dictionary<String,Any>或缩短[String:Any]

let datasourceDictionary = try! PropertyListSerialization.propertyList(from:data!, format: nil) as! [String:Any]

options参数可以省略。

答案 1 :(得分:6)

  1. 在Swift中通常使用[String:Any]。和价值添加&#34; nil&#34;类型。
  2. 您应该设置选项&#34; []&#34;

    let pathStr = Bundle.main.path(forResource: "Info", ofType: "plist")
    let data :NSData? = NSData(contentsOfFile: pathStr!)
    let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data as! Data, options: [], format: nil) as! [String:Any]
    print(datasourceDictionary.self)
    
  3. enter image description here

答案 2 :(得分:0)

文档说.propertyList(from:...)函数返回“属性列表对象”。它还说“属性列表对象包括NSData,NSString,NSArray,NSDictionary,NSDate和NSNumber对象”。因此,你的第三次尝试是最接近的;你只需要将返回值强制转换为NSDictionary:

let datasourceDictionary = try! PropertyListSerialization.propertyList(from: data!, options: [], format: nil) as! NSDictionary

将它转换为[String:Any]的接受答案肯定也有效,但是如果有人在根据对象是数组(如我自己)的属性列表中偶然发现这个问题,那么很高兴知道结果应该转换为NS_something,如NSArray或NSDictionary。