如何将 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 中的另一个视图的主要内容,如果未能解决你的问题,请参考以下文章
如何将枚举类型字段从反应发送到 GraphQL/AWS appsync
前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现