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"
    }
}

您必须设置所有编码键才能从现在开始工作

该类将仅对您在enum
CodingKeys
中描述的键进行编码/解码

如果您有更多的字符串,我建议您与服务器团队沟通,以创建字符串数组(
[string]
),而不是此模式



更新:由于您有大量的值,您应该选择
[String]

只是一个建议(未测试),但是您是否可以使用一个基类(扩展了Codable)和您不想覆盖的字段,然后使用一个只包含您需要覆盖的名称的子类?例如,编码键是否要求您为继承字段定义值?

假设我有1000个字符串,并且只想覆盖其中一个,我必须毫无理由地编写999个大小写。对我来说(无缘无故地写999个案例),这似乎不是一件明智的事情。这就是苹果公司目前设计的
Codable
。你将不得不忍受这种痛苦:)好吧,我对我的问题做了更多的解释,这样其他人就不会浪费时间来补充答案了。谢谢你,当然。但无论如何你做不到
Codable
不允许这样做。与上面的一个相同。。。但不是我的解决方案,比方说我有1000个字符串,只想覆盖一个,我必须毫无理由地写999个案例。对我来说(无缘无故地写999个案例)这似乎不是一件明智的事情@chaudharyshahbazaleem编码键的工作方式与上面相同。没有选择。简短的回答是你不能这么做。@AdityaSrivastava请不要添加重复的答案。@PGDev没有复制你的简单答案,可能会同时添加。谢谢,但我的问题不同。请重新阅读…不能这样做,因为它的配置数据是在应用程序启动时获取的。。。我们不能按索引使用。不过,将字典原样保存是一个解决方案。是的。或者您必须指定所有键。我们可以在这里进行继承吗。类似于父类中的不可重写字符串和子类中的可重写字符串。只是一个随机的想法@拉尔·克里希奈试过了,但编码键只适用于儿童班。它不解析父键。