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

pab*_*ros 3 nsdata swift swift3

我正在尝试property listDataSwift 3中读取一个,但我无法实现.

我尝试过这样的事情:

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

我得到了这个错误:

无法将"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
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

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

然后我尝试了这个:

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

我收到了这个错误:

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

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

vad*_*ian 8

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

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

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

options参数可以省略.


小智 8

  1. 在Swift中通常使用[String:Any].和值添加"nil"类型.
  2. 你应该设置选项"[]"

    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)
    
    Run Code Online (Sandbox Code Playgroud)

在此输入图像描述