Swift 使用';仅覆盖少数JSON键;编码键';枚举
我正在使用Swift 使用';仅覆盖少数JSON键;编码键';枚举,swift,codable,Swift,Codable,我正在使用Codables解析JSON数据。问题是我的几个编码键和变量名不同。为此,我使用了CodingKeysenum,这非常简单,但是我必须编写所有键,我不希望这样。我只想覆盖几个键,而不是全部 这里是JSON { "string_one" = "some string", "string_two" = "some string", "string_three_%s" = "some string", } 更多解释 struct Welcome: Codable {
Codables
解析JSON数据。问题是我的几个编码键和变量名不同。为此,我使用了CodingKeys
enum,这非常简单,但是我必须编写所有键,我不希望这样。我只想覆盖几个键,而不是全部
这里是JSON
{
"string_one" = "some string",
"string_two" = "some string",
"string_three_%s" = "some string",
}
更多解释
struct Welcome: Codable {
let stringOne, stringTwo, stringThreeS: String?
enum CodingKeys: String, CodingKey {
case stringOne = "string_one"
case stringTwo = "string_two"
case stringThreeS = "string_three_%s"
}
}
我知道添加
case string\u one,string\u two将起作用,但假设我有1000个字符串,并且只想覆盖其中一个,我必须毫无理由地编写999个案例。在我看来,这不是一件明智的事情(无缘无故地写999个案例)到目前为止,这是不可能的。您必须在CodingKeys
中指定所有案例
只是对于其他人,您不需要显式指定rawValue
,因为enum CodingKeys
的原始类型为String
,并且将选择大小写
名称作为默认的rawValue
,即
enum CodingKeys: String, CodingKey {
case string_three = "string_three_%s"
case string_one, string_two
}
简短的回答是你做不到。这只能通过将所有情况放在下面来实现:-
enum CodingKeys: String, CodingKey {
case string_one, string_two
case string_three = "string_three_%s"
}
键string\u one
和string\u two
将按原样拾取检查此模态类的正确形式。
希望您得到您的解决方案
struct Welcome: Codable {
let stringOne, stringTwo, stringThreeS: String?
enum CodingKeys: String, CodingKey {
case stringOne = "string_one"
case stringTwo = "string_two"
case stringThreeS = "string_three_%s"
}
}
您必须设置所有编码键才能从现在开始工作
该类将仅对您在enumCodingKeys
中描述的键进行编码/解码
如果您有更多的字符串,我建议您与服务器团队沟通,以创建字符串数组([string]
),而不是此模式
更新:由于您有大量的值,您应该选择[String]
只是一个建议(未测试),但是您是否可以使用一个基类(扩展了Codable)和您不想覆盖的字段,然后使用一个只包含您需要覆盖的名称的子类?例如,编码键是否要求您为继承字段定义值?假设我有1000个字符串,并且只想覆盖其中一个,我必须毫无理由地编写999个大小写。对我来说(无缘无故地写999个案例),这似乎不是一件明智的事情。这就是苹果公司目前设计的Codable
。你将不得不忍受这种痛苦:)好吧,我对我的问题做了更多的解释,这样其他人就不会浪费时间来补充答案了。谢谢你,当然。但无论如何你做不到Codable
不允许这样做。与上面的一个相同。。。但不是我的解决方案,比方说我有1000个字符串,只想覆盖一个,我必须毫无理由地写999个案例。对我来说(无缘无故地写999个案例)这似乎不是一件明智的事情@chaudharyshahbazaleem编码键的工作方式与上面相同。没有选择。简短的回答是你不能这么做。@AdityaSrivastava请不要添加重复的答案。@PGDev没有复制你的简单答案,可能会同时添加。谢谢,但我的问题不同。请重新阅读…不能这样做,因为它的配置数据是在应用程序启动时获取的。。。我们不能按索引使用。不过,将字典原样保存是一个解决方案。是的。或者您必须指定所有键。我们可以在这里进行继承吗。类似于父类中的不可重写字符串和子类中的可重写字符串。只是一个随机的想法@拉尔·克里希奈试过了,但编码键只适用于儿童班。它不解析父键。