【问题标题】:autocompletion send data id自动完成发送数据 id
【发布时间】:2019-04-04 04:37:51
【问题描述】:

我有一个 JSON 格式的响应

[
      {
          "id_ser_reg": "103",
          "n_ser_reg": "Operation NOC"
      },
      {
          "id_ser_reg": "120",
          "n_ser_reg": "Freelance"
      }
]

我有一个搜索文本字段并显示“n_ser_reg”作为标题,但如果我选择“n_ser_reg”我也想获得“id_ser_reg”,我尝试使用 alamofire 来获得响应,但我不知道如何获得"n_ser_reg" 和 "id_ser_reg" 同时出现。

这是获取 n_ser_reg 的图像,如果我点击按钮“cari”我想要发送 id_ser_reg,而不是 n_ser_reg

更新

我有一个链接,在那个链接中需要ID_ser_reg,但是在UI中它必须显示n_ser_reg,所以我必须显示n_ser_reg,当按下按钮时,n_ser_reg拥有的id_ser_reg被发送到链接

【问题讨论】:

  • 那么您是说名称和 hrids 不会从字典中产生预期值?
  • 您可以使用Codable 来解析您的 JSON 响应。
  • 不,我的意思是我如何选择一个名称,但也可以取 hrid 值,例如,我选择 NOC,我也得到 id 103。现在如果我选择 id 103,我只能得到 id 103
  • 你能给我一个 Codable 的例子吗
  • 如果您获得的数据有什么价值。另外,粘贴代码而不是添加图像。

标签: arrays swift alamofire


【解决方案1】:

您可以使用codable 来序列化数据并保留字典数组,而不是添加两个不同的名称和 ID 数组。

我在数组中添加了数据:

let tempArray : [[String:Any]] = [["id_ser_reg":"103",
                                   "n_ser_reg":"Operation NOC",
                                   ],
                                  ["id_ser_reg":"120",
                                   "n_ser_reg":"Freelance",
    ]
]

并创建了一个 jsonData 来使用codable:

do {
        let jsonData = try JSONSerialization.data(withJSONObject: tempArray, options: .prettyPrinted)

        print(jsonData)
    } catch let error as NSError {
        print(error)
    } 

对于Codable,首先创建一个struct

struct JsonResponse: Codable {
    var id_ser_reg : String?
    var n_ser_reg : String?
}

并序列化:

do {    
        let serverResponseData = try JSONDecoder().decode([JsonResponse].self, from: jsonData)

        print(serverResponseData[0].id_ser_reg!)
    } catch let error as NSError {
        print(error)
}

如您所见,serverResponseData 是一个数组,现在每个索引处都有名称和 ID。 Codable 将减少您将数据逐个添加到数组的代码行。

编辑

如果你想继续你所做的事情。你可以再做一件事。

创建一个数组为:

var arrayData = [[String:Any]]()

在您的回复中:

if let dictionaryArray = data as? [[String:Any]] {
    self.arrayData = dictionaryArray
}

现在您有了一个字典数组,您可以随时使用这些字典:

let singleData = self.arrayData[0] as! [String:Any]
print(singleData["id_ser_reg"])
print(singleData["n_ser_reg"])

您在问题中添加的图片并未说明确切的 UI 是什么以及您如何使用数据在 UI 中填充。如果可能的话,添加确切的代码而不是代码的图像,并在问题中添加与 UI 进行数据集成的逻辑。 希望我的回答能帮助您实现您的目标。

【讨论】:

  • 除了使用 codable 之外还有其他解决方案吗?
  • 你有我可以联系的联系人吗?
【解决方案2】:

您必须创建一个class/struct 并将您的数据解析到其中,而不是将响应解析为dictionary

struct Response: Codable {
    var id_ser_reg: String?
    var n_ser_reg: String?
}

上述结构符合Codable protocol,即您可以使用其properties 直接解析到JSON 响应。

   if let data = response.data {
        let response = try? JSONDecoder().decode([Response].self, from: data)
        print(response)
    } 

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    相关资源
    最近更新 更多