我正在尝试从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
文件或者执行此操作的方法是什么?
答案 0 :(得分:8)
Dictionary
是一种泛型类型,需要键和值的类型信息。
使用Dictionary<String,Any>
或缩短[String:Any]
:
let datasourceDictionary = try! PropertyListSerialization.propertyList(from:data!, format: nil) as! [String:Any]
options
参数可以省略。
答案 1 :(得分:6)
您应该设置选项&#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)
答案 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。