使用字典中的“值”填充 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 的标签

Python,如何使用字典填充数据框中的空值

如何访问 pandas 数据框列中的字典元素并对其进行迭代以创建填充有各自值的新列?

如何在 [关闭] 中使用字典值填充 fstring

如何使用 Pandas 数据框的常用键填充多个字典?

字典条目都是一样的