如何使用Swift Codable根据特定的排序顺序对自定义对象进行排序

时间:2019-01-07 17:30:23

标签: swift sorting codable

如何根据特定的排序顺序对自定义对象进行快速编码。 我正在使用快速编码协议。

{
    "data": {
        "team": [
              {
                "name": "XYZ",
                "designation": "Managing director - South Asia"
              },
              {
                "name": "XYZ",
                "designation": "Managing director - South Asia"
              }
            ],
        "recruiterName": "Lorium Ipsem text",
        "respondsQuickly": "1"
    },
    "metaData": {
                "sortOrder": [
                  "respondsQuickly",
                  "recruiterName",
                  "team"
                ]
              }
}

在这里,我需要根据sortOrder对象对数据对象进行排序。 现在这是一个Model对象

struct Welcome: Codable {
let data: DataClass?
let metaData: MetaData?
}
struct JDDataClass: Codable {
   let team: [Team]?
   let recruiterName, respondsQuickly: String?
}

struct Team: Codable {
   let name, designation: String?
}
struct JDMetaData: Codable {
let sortOrder: [String]?
}

我无法同时将All Keys作为其模型。 它现在不是JSON或字典,因为它是Codabale协议swift的自定义对象。

所需的输出:

let myArray = [
        {"respondsQuickly": "1"},
        {"recruiterName": "Lorium Ipsem text"},
        {"team": [
              {
                "name": "XYZ",
                "designation": "Managing director - South Asia"
              },
              {
                "name": "XYZ",
                "designation": "Managing director - South Asia"
              }
            ]
        }
    ]

2 个答案:

答案 0 :(得分:1)

这是工作场所代码。您可以检查一下。我希望这将有所帮助。 arrResult正在保存您的答案。

butter_bandpass_filter

答案 1 :(得分:0)

对结构键进行排序没有任何意义。当访问每个元素的成本相同时,为什么要对对象的变量进行排序。

也许您当前的结构是错误的。

if t > 2 and not trigger_sent:

如果您希望上面提到的输出具有这样的结构,这将更有意义:

{
  "data": {
    "team": [
      {
        "name": "XYZ",
        "designation": "Managing director - South Asia"
      },
      {
        "name": "XYZ",
        "designation": "Managing director - South Asia"
      }
    ],
    "recruiterName": "Lorium Ipsem text",
    "respondsQuickly": "1"
  },
  "metaData": {
    "sortOrder": [
      "respondsQuickly",
      "recruiterName",
      "team"
    ]
  }
}

不过,如果要使用当前结构实现此输出,则可以使用类似Reflection的方法在运行时读取结构的属性并对其进行相应排序。不用说,这种解决方案很难看,应该避免。