将 @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
}
我目前在我的应用程序上有很多@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
}