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

Posted

技术标签:

【中文标题】如何将 JSON 响应发送到 Swift 3 中的另一个视图【英文标题】:How to send JSON response to another view in Swift 3 【发布时间】:2017-01-18 08:08:05 【问题描述】:

我在将 JSON 响应从 UITableView 发送到另一个 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()
           

在此致谢

【问题讨论】:

您是如何尝试将其发送到其他 UITableView 的? 我在第二个控制器中创建了另一个产品变量,然后使用这种方法填充它。让 productsView = ProductTableViewController() productsView.productArray = productArray[indexPath.row] self.navigationController?.pushViewController(productsView, animated: false) @KrishnaCA 这应该可以,在此处放置一个断点并检查它是否为空,并在问题中添加此内容 【参考方案1】:

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

您可能更愿意将您的 JSON 数据转换为 Foundation 对象,操作它们,用它们创建 UITableView...当您需要再次使用 JSON 格式时,您可以转换这些 Foundation对象返回 JSON。

有很多方法可以实现这一点,并且一些很棒的第三方库可以很容易地做到这一点。但是,首先我鼓励您查看 Apple 的资源:

NSJSONSerialization Working with JSON in Swift

【讨论】:

以上是关于如何将 JSON 响应发送到 Swift 3 中的另一个视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将从服务器获得的响应发送到电子邮件?

响应发送到客户端后在 Django 中执行代码

如何将数据从回调传递到Django中的另一个视图?

如何将枚举类型字段从反应发送到 GraphQL/AWS appsync

前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现

如何使用 Adonis 发出 json-rpc 请求