将 @State 变量连接到 Codable 结构

Connect @State variables to a Codable struct

我目前在我的应用程序上有很多@State var,我想将它们放在 Codable 结构中,这反过来将形成 Json 作为有效负载发送到 [=30= 中所必需的对象]. ( API 部分超出了这个问题的范围)。 我的 'ask' 是,我如何将像下面的 2 这样的变量放在可编码结构中,这样当从用户那里选择一个值时,这些值将保存在 Json 对象中。

比如我有2个变量:

@State var pregnant: Bool = false
@State var household_size: Int = 1

我如何将这两个变量放在可编码结构中?

struct Welcome: Codable {
        let household: Household
    }

    struct Household: Codable {
        var pregnant: String
        var household_size: Int

        enum CodingKeys: String, CodingKey {
            case pregnant
            case household_size
    }
}

现在,当我尝试将变量的值放入 let = eligibility

时收到错误消息
let eligibility = Welcome(household: Household(pregnant:  pregnant, household_size: household_size))

错误:(household_size 也有同样的错误)

Cannot use instance member 'pregnant' within property initializer; property initializers run before 'self' is available

(注意上面的资格常数是应用程序中@State 变量的值。)

能够使用 Class & @Published 而不是 @State 成功地做到这一点。

class User: ObservableObject, Codable {
    enum CodingKeys: CodingKey {
        case disabled
    }

    init() { }

    required init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        disabled = try container.decode(Bool.self, forKey: .disabled)
    }

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

    @Published var disabled: Bool = false

}