在 Swift 中动态分配结构的属性
Assign dynamically properties of a Struct in Swift
我有这个结构:
struct Alphabet {
let a = "ciao"
let b = "hi"
let c = "hola"
}
let alphabet = Alphabet()
我希望每个 属性 的值成为 属性 本身的 string。
像这样:
alphabet.a = "a"
alphabet.b = "b"
alphabet.c = "c"
但我想完成,而不管属性的 数量 或它们的 值:
我试过这个:
Mirror(reflecting: Alphabet.self).children.forEach { (label, value) in
self.alphabet[keyPath: label] = label!
}
但我知道这不是 KeyPath 的工作方式...
可能也存在类型安全问题。
有什么想法吗?
据我所知,keyPaths 不是可行的方法,您需要使用 CodingKeys
这是一个工作示例,创建 JSON 然后对其进行解码可能并不完美,因此您最好更改我的解决方案以满足您的需要。
struct Alphabet: Codable {
let a: String
let b: String
let c: String
enum CodingKeys: String, CodingKey, CaseIterable
{
case a
case b
case c
}
static func generateJSON() -> String {
var json = "{"
for i in CodingKeys.allCases
{
json += "\"\(i.stringValue)\": \"\(i.stringValue)\","
}
json.removeLast()
json += "}"
return json
}
}
let decoder = JSONDecoder()
let alphabet = try decoder.decode(Alphabet.self, from: Alphabet.generateJSON().data(using: .utf8)!)
print(alphabet.a) //Prints "a"
我有这个结构:
struct Alphabet {
let a = "ciao"
let b = "hi"
let c = "hola"
}
let alphabet = Alphabet()
我希望每个 属性 的值成为 属性 本身的 string。 像这样:
alphabet.a = "a"
alphabet.b = "b"
alphabet.c = "c"
但我想完成,而不管属性的 数量 或它们的 值:
我试过这个:
Mirror(reflecting: Alphabet.self).children.forEach { (label, value) in
self.alphabet[keyPath: label] = label!
}
但我知道这不是 KeyPath 的工作方式... 可能也存在类型安全问题。 有什么想法吗?
据我所知,keyPaths 不是可行的方法,您需要使用 CodingKeys
这是一个工作示例,创建 JSON 然后对其进行解码可能并不完美,因此您最好更改我的解决方案以满足您的需要。
struct Alphabet: Codable {
let a: String
let b: String
let c: String
enum CodingKeys: String, CodingKey, CaseIterable
{
case a
case b
case c
}
static func generateJSON() -> String {
var json = "{"
for i in CodingKeys.allCases
{
json += "\"\(i.stringValue)\": \"\(i.stringValue)\","
}
json.removeLast()
json += "}"
return json
}
}
let decoder = JSONDecoder()
let alphabet = try decoder.decode(Alphabet.self, from: Alphabet.generateJSON().data(using: .utf8)!)
print(alphabet.a) //Prints "a"