如何将JSON响应发送到Swift 3中的另一个视图

时间:2017-01-18 08:08:05

标签: ios json swift uitableview

我在将UITableView的JSON响应发送到另一个UITableView时出现问题。

我想根据TableView上的选定行将下面代码中的Products数组发送到另一个UITableViewController,但是当我在didSelectRowAt中记录该值时,它返回nil。 所以这是JSON的回归。

{
  "error_description": [],
  "results": [
    {
      "id": 2,
      "name": "Ernser, Kilback and Kreiger LLC",
      "address": "48788 Adaline Ville 7634 Bertram Shoal",
      "contact_person": "Coralie Schaden",
      "mobile_number": "(238) 076-0562",
      "image": {
        "url": null,
        "thumb": {
          "url": null
         },
        "medium": {
           "url": null
         },
        "small": {
          "url": null
        },
        "icon": {
           "url": null
         }
       },
      "registered_at": "2017-01-10T04:16:52.621Z",
      "products": [
        {
          "id": 21,
          "name": "Fantastic Rubber Car",
          "image": {
            "url": null,
            "thumb": {
              "url": null
            },
            "medium": {
              "url": null
            },
            "small": {
          "url": null
        },
        "icon": {
          "url": null
        }
      },
      "points": 0,
      "merchant_id": 2,
      "created_at": "2017-01-10T04:16:52.630Z",
      "updated_at": "2017-01-10T04:16:52.636Z"
    },
    {
      "id": 22,
      "name": "Mediocre Plastic Shirt",
      "image": {
        "url": null,
        "thumb": {
          "url": null
        },
        "medium": {
          "url": null
        },
        "small": {
          "url": null
        },
        "icon": {
          "url": null
        }
      },
      "points": 15,
      "merchant_id": 2,
      "created_at": "2017-01-10T04:16:52.819Z",
      "updated_at": "2017-01-10T04:16:52.827Z"
    },
  ]
  }

这是我获取响应代码的一部分。 我使用了Alamofire

    var merchantModel: Merchant!
    var merchantArr = [Merchant]()

    var productArr = [Product]()
    var productModel : Product?
.....
case .success:

           let json = JSON(data: response.data!)

           for result in json["results"].arrayValue{
               guard let merchantID = result["id"].number, let merchantName = result["name"].string, let merchantAddress = result["address"].string, let contactPerson = result["contact_person"].string, let mobilenumber = result["mobile_number"].string else{

                   return
               }
               self.merchantModel = Merchant(merchantID: merchantID, merchantName: merchantName, merchantAddress: merchantAddress, contactPerson: contactPerson, mobileNumber: mobilenumber, merchantImage: contactPerson)

               let isSuccessfulSave = NSKeyedArchiver.archiveRootObject(self.merchantModel!, toFile: Merchant.ArchiveURL.path)
               if !isSuccessfulSave {
                   print("Failed to save sender...")
               }


               for prodArr in result["products"].arrayValue{
                   print("prodArr:\(prodArr)")
                   guard let prodID = prodArr["id"].number, let prodName = prodArr["name"].string,
                    let points = prodArr["points"].number else{

                       return
                   }

                   self.productModel = Product(productID: prodID, productName: prodName, productPoints: points)



               }

               self.merchantArr.append(self.merchantModel!)
               self.productArr.append(self.productModel!)

               self.merchantModel.loadMerchant()
               self.tableView.reloadData()
           }

先谢谢

1 个答案:

答案 0 :(得分:3)

Swift不是javascript,JSON不是处理这种语言数据的最简单方法。

您可能更愿意将JSON数据转换为Foundation个对象,对其进行操作,使用它们创建UITableView ...当您需要再次使用JSON格式时,您需要转换那些Foundation个对象回到JSON。

有很多方法可以实现这一点,而且一些令人惊叹的第三方库非常容易实现。但是首先我建议您查看Apple的资源: