作者:幸福的肖巍 | 来源:互联网 | 2023-01-29 18:51
最近(如iOS的11),init(contentsOfFile:)
在NSDictionary
被废弃.
我想成为一个具有前瞻性思维的公民,所以我寻找另一种方法将属性列表(plist)加载到一个NSDictionary
类型中.我能找到的唯一的东西PropertyListSerialization
是比较笨重的.
这就是我想出的差异:
func dealWithFakeConf(atPath path:String) {
// So easy!
let myD:Dictionary = NSDictionary.init(contentsOfFile: path) as! Dictionary
let l = myD["location"] as? String ?? "BAD_STRING"
let q = myD["quantity"] as! Int
print("location = \(l)")
print("quantity = \(q.description)")
// Old is new again?!
guard let rawData = FileManager.default.contents(atPath: path) else {
fatalError("Sumpin done gone wrong!")
}
var format = PropertyListSerialization.PropertyListFormat.xml
let data = try? PropertyListSerialization.propertyList(from:rawData, options:[.mutableContainers], format:&format)
guard let realData = data as? Dictionary else {
fatalError("OMG! Now what?")
}
locationLabel.text = realData["location"] as? String ?? "BAD_STRING"
let qty:Int? = realData["quantity"] as? Int
quantityLabel.text = qty?.description
}
我注意到这里的答案很好地使用PropertyListSerialization
了我想出的更少的代码,但是在阅读Apple的7年历史的文档列表编程指南时这并不明显.而这个例子仍然是3个缩进深度.
我在其他地方错过了替换便利初始化程序吗?这是我们现在要做的将plist加载到Dictionary中吗?