首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Plist编解码返回字典[String:Decodable]

Plist编解码返回字典[String:Decodable]
EN

Stack Overflow用户
提问于 2020-09-28 18:15:13
回答 1查看 302关注 0票数 0

我希望能够保存字符串类型的字典:可编码到plist并恢复为相同类型。我试过了,但它抛出了错误:

代码语言:javascript
复制
  let dictionary:[String:Any] = ["point":CGPoint(1,1), "value": 10, "key" : "testKey"] 

   do { 
        let url = FileManager.default.temporaryDirectory.appendingPathComponent("test.plist")
        try savePropertyList(dictionary, toURL: url)
        buildFromPlist(url)
      } catch {
        print(error)
    }
  


    private func savePropertyList(_ plist: Any, toURL url:URL) throws
   {
    let plistData = try PropertyListSerialization.data(fromPropertyList: plist, format: .xml, options: 0)
    try plistData.write(to: url)
   }

  private func buildFromPlist(_ url:URL)
  {
       do {
          let data = try Data(contentsOf: url)
          let decoder = PropertyListDecoder()
          let dictionary = try decoder.decode([String:Decodable], from: data)
          NSLog("\(dictionary)")
      } catch {
           NSLog("Error decoding \(error)")
      }
   
    
   }

但是我在decode函数中得到了构建错误:

代码语言:javascript
复制
  Value of protocol type 'Decodable' cannot conform to 'Decodable'; only struct/enum/class types can conform to protocols

我想知道我如何读回我保存到plist文件中的字典?

编辑:即使savePropertyList在运行时失败,出现诸如CGPoint和CGAffineTransform这样的对象,也会出现以下错误-

代码语言:javascript
复制
 "Property list invalid for format: 100 (property lists cannot contain objects of type 'CFType')" UserInfo={NSDebugDescription=Property list invalid for format: 100 (property lists cannot contain objects of type 'CFType')}

我想知道我们如何编写可编码的对象来plist和恢复?

EN

回答 1

Stack Overflow用户

发布于 2020-09-28 18:25:01

这是行不通的,因为decoder.decode中的类型必须是具体类型。而没有尾随.self[String:Decodable]将抛出另一个错误。

Codable协议的目标是序列化自定义结构或类,因此使您的字典成为结构

代码语言:javascript
复制
struct MyType : Codable {
    let point : CGPoint
    let value : Int
    let key : String
}

并对此进行编码。在解码部分中写入

代码语言:javascript
复制
let item = try decoder.decode(MyType.self, from: data)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64100207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档