在这里,我在发布参数后从服务器响应中获取数据,在这里我需要在表格视图中显示它,它应该如下图所示显示0
是特定运输方法的价格< / p>
我已经编写过服务器响应数据的模型类,这里是
struct ShippingMethod {
let carrierCode : String
let priceInclTax : Int
let priceExclTax : Int
let available : Any
let carrierTitle : String
let baseAmount : Int
let methodTitle : String
let amount : Int
let methodCode : String
let errorMessage : Any
init(dict : [String:Any]) {
self.carrierCode = dict["carrier_code"] as! String
self.priceInclTax = dict["price_incl_tax"]! as! Int
self.priceExclTax = dict["price_excl_tax"]! as! Int
self.available = dict["available"]!
self.carrierTitle = dict["carrier_title"] as! String
self.baseAmount = dict["base_amount"]! as! Int
self.methodTitle = dict["method_title"]! as! String
self.amount = dict["amount"]! as! Int
self.methodCode = dict["method_code"] as! String
self.errorMessage = (dict["error_message"] != nil)
}
}
通过使用这个,我使用代码
形成了这样的数组类型 var finalDict = [String: [String]]()
var responseData = [ShippingMethod]()
do
{
let array = try JSONSerialization.jsonObject(with: data, options: []) as? [[String : Any]]
for item in array! {
self.responseData.append(ShippingMethod.init(dict: item))
}
print(self.responseData)
}
catch let error
{
print("json error:", error)
}
print(self.responseData)
for item in self.responseData {
let dict = item
let carrierTitle = dict.carrierTitle
let methodTitle = dict.methodTitle
if self.finalDict[carrierTitle] == nil {
self.finalDict[carrierTitle] = [String]()
}
self.finalDict[carrierTitle]!.append(methodTitle)
}
print(self.finalDict)
此finalDict
键值对中此["Flat Rate": ["Fixed"], "Best Way": ["Table Rate"]]
的{{1}}输出应显示为节标题,且carrier title
和Flat Rate
键值对应显示为method title
部分中的行,但问题是我需要Fixed
密钥值对,对于相应的amount
任何人都可以帮我解决此问题吗?
答案 0 :(得分:0)
您可以指定另一个字典,其中键为methodTitle
和amount
作为值。即,["fixed":"whatever_amount"]
要么
您可以采用不同的方式finalDict
,例如["Flat Rate": ["tilte":"Fixed","amount":"0"], "Best Way": ["title":"Table Rate","amount":"0"]]
如果您难以对此进行编码,则可以恢复原状。
修改强> 您可以使用以下代码在我上面建议的第二个解决方案中创建数组:
for item in self.responseData {
let dict = item
let carrierTitle = dict.carrierTitle
let methodTitle = dict.methodTitle
let amount = dict.amount
if self.finalDict[carrierTitle] == nil {
self.finalDict[carrierTitle] = [[String:String]]()
}
let innerDict = ["title":methodTitle,"amount":amount]
self.finalDict[carrierTitle]!.append(innerDict)
}
答案 1 :(得分:0)
为什么不创建另一个显示行数据的结构:
struct CarrierInfo {
let name:String
let amount:Int
}
将finalDict
更改为
var finalDict = [String: [CarrierInfo]]()
创建CarrierInfo实例并在finalDict
中设置它for item in self.responseData {
let dict = item
let carrierTitle = dict.carrierTitle
let methodTitle = dict.methodTitle
let amount = dict.amount
if self.finalDict[carrierTitle] == nil {
self.finalDict[carrierTitle] = [CarrierInfo]()
}
self.finalDict[carrierTitle]!.append(CarrierInfo(name: carrierTitle, amount: amount))
}
同样,您可以进行其他必要的更改。这样可以将行显示数据整齐地包装在结构中。
PS:我没有在IDE中测试代码,因此它可能包含拼写错误。