gpt4 book ai didi

swift - 如何使 ObservableObject 符合 Codable 协议(protocol)?

转载 作者:行者123 更新时间:2023-12-01 07:42:50 28 4
gpt4 key购买 nike

在 SwiftUI beta 5 中,Apple 引入了 @Published 注解。此注释当前阻止此类符合 Codable 协议(protocol)。

我怎样才能遵守这些协议(protocol),以便我可以将这个类编码和解码为 JSON?您现在可以忽略 image 属性。

class Meal: ObservableObject, Identifiable, Codable {

enum CodingKeys: String, CodingKey {
case id
case name
case ingredients
case numberOfPeople
}

var id = Globals.generateRandomId()
@Published var name: String = "" { didSet { isInputValid() } }
@Published var image = Image("addImage")
@Published var ingredients: [Ingredient] = [] { didSet { isInputValid() } }
@Published var numberOfPeople: Int = 2
@Published var validInput = false

func isInputValid() {
if name != "" && ingredients.count > 0 {
validInput = true
}
}
}

最佳答案

添加 init()encode()您的类(class)的方法:

required init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)

id = try values.decode(Int.self, forKey: .id)
name = try values.decode(String.self, forKey: .name)
ingredients = try values.decode([Ingredient].self, forKey: .ingredients)
numberOfPeople = try values.decode(Int.self, forKey: .numberOfPeople)
}

func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(id, forKey: .id)
try container.encode(name, forKey: .name)
try container.encode(ingredients, forKey: .ingredients)
try container.encode(numberOfPeople, forKey: .numberOfPeople)
}

关于swift - 如何使 ObservableObject 符合 Codable 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57444059/

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