我正在尝试这个,但有错误。还有什么其他方法可以对这个项目列表进行排序。
获取元组类型的错误值
“(String,JSON)”没有成员“subscript”

  let jsonData = try JSONSerialization.data(withJSONObject: bizSnapshot.value as Any, options: .prettyPrinted)
  var bizOfferingsJson = try JSON(data: jsonData)

bizOfferingsJson项包含itemIndex作为Int键,我想基于该itemIndex进行排序
 bizOfferingsJson = bizOfferingsJson.sorted(by: { $0.["itemIndex"] > $1.["itemIndex"] })

  print("bizOfferingsJson===",bizOfferingsJson)

bizOfferingsJson数据示例
[
  {
    "isVisible" : true,
    "itemRetailInfo" : {
      "units" : "GRAMS",
      "quantityPrice" : [
        {
          "discountPrice" : 0,
          "regularPrice" : 25,
          "quantity" : 1000,
          "quantitySelected" : 1000,
          "isEditable" : false
        }
      ]
    },
    "imageStoragePathList" : [
      "ONION_RED.png"
    ],
    "bizOfferingsID" : "Vegetables_0",
    "masterImage" : 0,
    "vegNonVegInfoEnum" : "NONE",
    "description" : "",
    "itemQunatitySelected" : 0,
    "bizOfferingsHeaderTypeThree" : {
      "indexOrder" : 0,
      "headerText" : "Vegetables",
      "isVisible" : true
    },
    "itemIndex" : 0,
    "totalCountQunatity" : 0,
    "primaryText" : "Onion Red"
  },
  {
    "isVisible" : true,
    "itemRetailInfo" : {
      "units" : "GRAMS",
      "quantityPrice" : [
        {
          "discountPrice" : 0,
          "regularPrice" : 25,
          "quantity" : 1000,
          "quantitySelected" : 1000,
          "isEditable" : false
        }
      ]
    },
    "imageStoragePathList" : [
      "POTATO.png"
    ],
    "bizOfferingsID" : "Vegetables_1",
    "masterImage" : 0,
    "vegNonVegInfoEnum" : "NONE",
    "description" : "",
    "itemQunatitySelected" : 0,
    "bizOfferingsHeaderTypeThree" : {
      "indexOrder" : 0,
      "headerText" : "Vegetables",
      "isVisible" : true
    },
    "itemIndex" : 1,
    "totalCountQunatity" : 0,
    "primaryText" : "Potato"
  },
  {
    "isVisible" : true,
    "itemRetailInfo" : {
      "units" : "PIECES",
      "quantityPrice" : [
        {
          "discountPrice" : 0,
          "regularPrice" : 3,
          "quantity" : 1,
          "quantitySelected" : 0.10000000000000001,
          "isEditable" : false
        }
      ]
    },
    "imageStoragePathList" : [
      "CORIANDER_LEAVES_BUNCH.png"
    ],
    "bizOfferingsID" : "Vegetables_2",
    "masterImage" : 0,
    "vegNonVegInfoEnum" : "NONE",
    "description" : "",
    "itemQunatitySelected" : 0,
    "bizOfferingsHeaderTypeThree" : {
      "indexOrder" : 0,
      "headerText" : "Vegetables",
      "isVisible" : true
    },
    "itemIndex" : 2,
    "totalCountQunatity" : 0,
    "primaryText" : "Coriander Leaves Bunch"
  },
  {
    "isVisible" : true,
    "itemRetailInfo" : {
      "units" : "GRAMS",
      "quantityPrice" : [
        {
          "discountPrice" : 0,
          "regularPrice" : 8,
          "quantity" : 500,
          "quantitySelected" : 500,
          "isEditable" : false
        }
      ]
    },
    "imageStoragePathList" : [
      "TOMATO_STANDARD.png"
    ],
    "bizOfferingsID" : "Vegetables_3",
    "masterImage" : 0,
    "vegNonVegInfoEnum" : "NONE",
    "description" : "",
    "itemQunatitySelected" : 0,
    "bizOfferingsHeaderTypeThree" : {
      "indexOrder" : 0,
      "headerText" : "Vegetables",
      "isVisible" : true
    },
    "itemIndex" : 3,
    "totalCountQunatity" : 0,
    "primaryText" : "Tomato Standard"
  }
]

最佳答案

您需要澄清在假设数组的情况下对哪种类型排序

var bizOfferingsJson = try JSON(data: jsonData).array!
bizOfferingsJson = bizOfferingsJson.sorted(by: { $0["itemIndex"] > $1["itemIndex"] })

或者使用变异sort
bizOfferingsJson.sort{ $0["itemIndex"] > $1["itemIndex"] }

考虑到json,使用Codable更好
struct Root: Codable {
    let isVisible: Bool
    let itemRetailInfo: ItemRetailInfo
    let imageStoragePathList: [String]
    let bizOfferingsID: String
    let masterImage: Int
    let vegNonVegInfoEnum, purpleDescription: String
    let itemQunatitySelected: Int
    let bizOfferingsHeaderTypeThree: BizOfferingsHeaderTypeThree
    let itemIndex, totalCountQunatity: Int
    let primaryText: String

    enum CodingKeys: String, CodingKey {
        case isVisible, itemRetailInfo, imageStoragePathList, bizOfferingsID, masterImage, vegNonVegInfoEnum
        case purpleDescription = "description"
        case itemQunatitySelected, bizOfferingsHeaderTypeThree, itemIndex, totalCountQunatity, primaryText
    }
}

// MARK: - BizOfferingsHeaderTypeThree
struct BizOfferingsHeaderTypeThree: Codable {
    let indexOrder: Int
    let headerText: String
    let isVisible: Bool
}

// MARK: - ItemRetailInfo
struct ItemRetailInfo: Codable {
    let units: String
    let quantityPrice: [QuantityPrice]
}

// MARK: - QuantityPrice
struct QuantityPrice: Codable {
    let discountPrice, regularPrice, quantity: Int
    let quantitySelected: Double
    let isEditable: Bool
}

var res = try! JSONDecoder().decode([Root].self, from: jsonData)
res.sort { $0.itemIndex > $1.itemIndex }

10-08 14:38