基于字符串数组配置collectionView:cellForRowAt



我从后端得到了这个JSON数据(不是逐字逐句的(。它包含实际数据和描述要显示的单元格序列的字符串数组:

{
"data": [
{
"name": "text",
"data": {
"text": "some text"
}
},
{
"name": "pic",
"data": {
"url": "https://somepic.jpg",
"text": "picture"
}
},
{
"name": "switcher",
"data": {
"id": 1,
"options": [
{
"id": 0,
"text": "option 1"
},
{
"id": 1,
"text": "option 2"
},
{
"id": 2,
"text": "option 3"
}
]
}
}
],
"view": [
"text",
"pic",
"switcher",
"text"
]
}

问题是,我无法理解如何配置cellForRowAt:并在一个部分中获得正确的单元格顺序。(即文本、图片、选择器、文本(。

我尝试了几种方法:

  1. 循环通过";视图";数组和在每个单独的视图字符串上切换以使特定单元格出列,但这似乎不起作用;void函数中意外的非void返回值";错误
  2. 我也在考虑将一个";视图";数组放入字典中,然后根据其中的键将特定单元格出列,但字典应该具有唯一的键,这意味着我将没有2";文本";条目,其中一个将丢失

因此,问题是:如何根据字符串数组对特定单元格出列同样重要的是要理解它应该在一节中完成。我觉得它在某种程度上并不难实现,但我现在有点迷失了方向。谢谢

您需要将视图列表和数据数组转换为单元格内容数组,以便在TableViewDelegate和TableViewSource方法中使用:

var cellsContents : [Int] = []
for aView in view {
var found = false
var index = 0
for aData in data {
if !found {
if let name = aData["name"] as? String {
if aView == name {
found = true
cellsContents.append(index)
continue
}
}
index = index + 1
}
}

}

然后:

  • 行数:cellsContents.count
  • 行的类型和内容:data[cellsContents[indexPath.row]]["名称"]和data[celleContents[indexPath.low]]["数据"]

最新更新