我无法将数据从模型类传递到swift 3中的表视图?

时间:2017-11-02 05:59:51

标签: ios arrays swift

在这里,我在发布参数后从服务器响应中获取数据,在这里我需要在表格视图中显示它,它应该如下图所示显示0是特定运输方法的价格< / p>

enter image description here

我已经编写过服务器响应数据的模型类,这里是

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 titleFlat Rate键值对应显示为method title部分中的行,但问题是我需要Fixed密钥值对,对于相应的amount任何人都可以帮我解决此问题吗?

2 个答案:

答案 0 :(得分:0)

您可以指定另一个字典,其中键为methodTitleamount作为值。即,["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中测试代码,因此它可能包含拼写错误。