使用字典中的“值”填充 UITableViewCells 的问题
Posted
技术标签:
【中文标题】使用字典中的“值”填充 UITableViewCells 的问题【英文标题】:Issue populating UITableViewCells with 'values' from dictionary 【发布时间】:2020-03-17 21:43:22 【问题描述】:我有一个 ios 应用程序正在向我的 API 发出 GET 请求以获取所有帖子,这些帖子保存到数据库中。
我正在尝试将检索到的数据填充到 UITableView 单元格中。以下是使用的主要代码:
if let jsonArray = try JSONSerialization.jsonObject(with:
data, options : .allowFragments) as? [Dictionary<String,Any>]
print(jsonArray) // use the json here
//loop through the jsonArray (which holds the objects)
for deal in jsonArray
//loop through indivdual objects
for (key, value) in deal
var newDeal:Deal!
print(key, value)
if(key == "location")
newDeal.address = value as! String //after assigning, newDeal is null
if(key == "description")
newDeal.description = value as! String //after assigning, newDeal is null
if(key == "promotion_end")
newDeal.availability = value as! String //after assigning, newDeal is null
if(key == "user_id")
newDeal.poster = value as! String //after assigning, newDeal is null
if(key == "created_at")
newDeal.postedOn = value as! String //after assigning, newDeal is null
self.deals.append(newDeal)//null error
//Example of Deal object:
// Deal(poster: "Company name", postedOn: "2020-02-15", description: "Body of post goes here", availability: "11am-2pm Sat/Sun", address: "300 Somewhere Street")
我正在遍历 jsonArray 中的每个对象。我正在检查键的名称,如果键例如 == 到“位置”,则将与键关联的值设置为地址,以尝试为每个 tableView 单元格“构建”Deal 对象随着 for 循环的执行。
为什么newDeal.address、newDeal.description等赋值后为null?以下是我在调试时捕获的几张图像,数据的格式。
【问题讨论】:
【参考方案1】:实际上,您的代码应该会崩溃,因为您将 newDeal
声明为隐式解包可选,但您没有对其进行初始化。
循环可以简化,你必须创建一个Deal
的实例
for deal in jsonArray
let newDeal = Deal(poster: deal["user_id"] as! String,
postedOn: deal["created_at"] as! String,
description: deal["description"] as! String,
availability: deal["promotion_end"] as! String,
address: deal["location"] as! String)
self.deals.append(newDeal)
我建议使用JSONDecoder
解码 JSON,这样会更舒服。
【讨论】:
以上是关于使用字典中的“值”填充 UITableViewCells 的问题的主要内容,如果未能解决你的问题,请参考以下文章
使用字典值在 tableView 内填充 collectionView 的标签