我有一个视图控制器,上面有一个textField。当用户按下textField时,它会切换到tableView并使用我的字典中的"name"
填充tableView。
我的字典数据如下:
var objects = [
{
"id": "001",
"typeTwo": "Poison",
"name": "Bulbasaur",
"type": "Grass"
},
{
"id": "002",
"typeTwo": "Poison",
"name": "Ivysaur",
"type": "Grass"
}]
......等等。
当用户选择一个单元格时,它会将名称传递回第一个VC并显示他们所选内容的小精灵图像。
一切正常。
然后用户可以按下一个分段为CollectionViewController
的按钮,您可以看到显示的所有Pokemon。
我当时想做什么:
目前,我只是将CollectionView设置为仅使用上面相同的字典数据显示所有的口袋妖怪,但我想要的是,它只显示具有相同{{1}的口袋妖怪}
例如:
如果用户选择了"Type"
,其中包含Grass和Poison类型,那么当他们进入CollectionView时,它只会显示Pokemon也可以是Grass或Poison。
希望这是有道理的,如果您需要查看我的任何代码,请告诉我。
答案 0 :(得分:1)
您可以使用过滤来过滤字典,只返回与您在谓词中编写的条件匹配的元素,这些元素在这里获得具有特定类型的小宠物:
var objects = [
[
"id": "001",
"typeTwo": "Poison",
"name": "Bulbasaur",
"type": "Grass"
],
[
"id": "002",
"typeTwo": "Fly",
"name": "Ivysaur",
"type": "Grass"
],
[
"id": "003",
"typeTwo": "Poison",
"name": "Ivysaur",
"type": "Water"
]
]
var filteredObjects = objects.filter{
let valueType = $0["type"]
let valueTypeTwo = $0["typeTwo"]
if (valueType == "Grass" || valueType == "Water") && valueTypeTwo == "Poison"
{
return true
}
return false
}
print(filteredObjects)
答案 1 :(得分:0)
您不应该使用字典作为集合视图的模型。字典是无序集合,集合视图显示对象的有序列表。
您展示的数据结构是一系列字典。这是一个非常有效的方法来存储集合视图的数据,因为数组 是一个有序的集合。
Mohamed的过滤字典的代码是过滤结果的好方法,但是您需要使用新的过滤后的数组作为集合视图的模型(数据)。