我正在开发一个项目,我在服务器上有一些设置,我通过Plist文件获取,我想读取这个Plist文件而不创建任何本地副本。
需要将此设置存储在字典中而不是本地Plist文件中。
任何想法我们怎么能这样做?
示例Plist如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>New item</key>
<array>
<dict>
<key>value</key>
<string>Data1</string>
<key>key</key>
<string>Tab1</string>
</dict>
<dict>
<key>value</key>
<string>Data2</string>
<key>key</key>
<string>Tab2</string>
</dict>
</array>
</dict>
</plist>
如果需要更多细节,请告诉我。
提前致谢!
答案 0 :(得分:2)
您需要使用NSPropertyListSerialization课程来解析Data
对Dictionary
的回复。
let url:URL = URL(string: "")! // URL to fetch plist
let urlSession:URLSession = URLSession(configuration: URLSessionConfiguration.default)
urlSession.dataTask(with: url) { (data:Data?, response:URLResponse?, error:Error?) in
guard let data = data else {
return
}
let plistDict = try? PropertyListSerialization.propertyList(from: data, options:.mutableContainers, format: nil)
guard let dict = plistDict else {
print("Error in parsing")
return
}
print(dict)
}.resume()
答案 1 :(得分:1)
与加载和解析JSON几乎相同。而不是JSONSerialization
使用PropertyListSerialization
。
let urlString = "http://server.com/api"
let url = URL(string: urlString)
URLSession.shared.dataTask(with:url!) { (data, response, error) in
guard error == nil else {
print(error!)
return
}
do {
let plistDictionary = try PropertyListSerialization.propertyList(from: data!, format: nil) as! [String:Any]
print(plistDictionary)
} catch {
print(error)
}
}.resume()