gpt4 book ai didi

Swift - 编码和解码字典 [String :Any] into plist

转载 作者:行者123 更新时间:2023-11-28 09:48:53 25 4
gpt4 key购买 nike

我试图将字典存储在我的类标记中,但它抛出一个错误,指出它不可编码或不可解码。我可以看到错误是由 [String: Any] 引起的,但我该如何解决它?

var buttonActions : [String: [String: [String:Any]]] = [:]

保存和加载

func saveData() {
let dataFilePath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("\(fileName).plist")

let encoder = PropertyListEncoder()
do {
let data = try encoder.encode(markerArray)
try data.write(to: dataFilePath!)
print("Saved")
} catch {
print("Error Encoding \(error)")
}
}

func loadData() {
let dataFilePath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("\(fileName).plist")

if let data = try? Data(contentsOf: dataFilePath!){
let decoder = PropertyListDecoder()
do {
markerArray = try decoder.decode([Marker].self, from: data)
} catch {
print("Decode Error \(error)")
}
}

class Marker : Encodable, Decodable {
var UUIDpic: UUID = UUID()
var alpha: Int = 1
var buttonType: Int = 0
var buttonActions : [String: [String: [String:Any]]] = [:]
var buttonNameColor: String = ""
var buttonNameFontSize: Int = 10
var buttonShape: String = ""
var loggerRect: String = ""
var maskColor: String = ""
var name: String = ""
}

最佳答案

不幸的是,您不能对包含 Any 的泛型类型使用 encodedecode(例如 [String: Any][任何])。 Any 不符合协议(protocol) Encodable 也不符合 Decodable 并且 Swift 不知道如何对其进行编码/解码。您必须为字典使用具体的泛型类型(例如 [String: String])。

如果你仍然需要使用像 Any 这样的通用类型,你必须实现 encode(to:)init(from:)方法。另一种选择是使用 struct 而不是 [String: [String: [String:Any]]] ,它符合 Codable ( 可编码和可解码)。您仍然需要在该结构中实现 encode(to:)init(from:) 方法,但好的一面是您不必编写 encoder.encode() 所有属性的故事,就像您在 Marker 类中实现它们一样。

关于Swift - 编码和解码字典 [String :Any] into plist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53585848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com