【问题标题】:How to Initialize Codable ObservedObject如何初始化 Codable ObservedObject
【发布时间】:2023-01-21 18:37:44
【问题描述】:

在 SwiftUI 中,我正在尝试创建一个符合 Codable 的类(因此我可以将其保存在 @AppStorage 中),并具有 @Published 属性,因此它可以作为 EnvironmentObject 传递。

This教程给了我下面的例子:

class User: ObservableObject, Codable {
    
    enum CodingKeys: CodingKey {
        case name
    }
    
    @Published var name = "Bob Smith"
    
    required init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        name = try container.decode(String.self, forKey: .name)
    }
    
    func encode(to encoder: Encoder) throws {
        ...
    }
}

我想知道如何将 String 传递给类初始值设定项。 (即var user = User("Bob Smith"

除非我弄错了,required 意味着所有实例和子类都必须使用该初始化程序。鉴于 name 已在现有​​初始化程序中分配,我将如何将自定义名称传递到此类的初始化程序中?

【问题讨论】:

    标签: swift swiftui codable observedobject


    【解决方案1】:

    是的 required 意味着所有子类都必须实现 init,在这种情况下,这是一项要求,因为符合 Codable

    但这并不意味着您不能添加其他初始化程序,以便您可以从 JSON 以外的其他类型的数据创建类的实例

    所以只需添加你需要的任何初始化

    init(name: String) {
        self.name = name
    }
    
    let user = User(name: "Joe")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-09
      • 2020-10-29
      • 1970-01-01
      • 2018-09-09
      • 2018-03-01
      相关资源
      最近更新 更多