0

填充的CollectionView我有上有一個文本框視圖控制器。當用戶按下textField時,它會跳轉到tableView並使用我的字典中的"name"填充tableView。如何從詞典中斯威夫特

我的字典數據如下:

var objects = [ 
{ 
    "id": "001", 
    "typeTwo": "Poison", 
    "name": "Bulbasaur", 
    "type": "Grass" 
}, 
{ 
    "id": "002", 
    "typeTwo": "Poison", 
    "name": "Ivysaur", 
    "type": "Grass" 
}] 

...等等。

當用戶選擇的小區時,它把名稱回到第一VC和示出了用於它們選擇了什麼的小寵物的圖像。

這一切工作正常。然後

用戶可以按下一個按鈕,塞格斯到CollectionViewController,你可以看到顯示的所有口袋妖怪。

我想什麼然後做:

目前,我只是有的CollectionView設置使用上述相同的字典數據都只是顯示寵物小精靈,但我想什麼,是它僅顯示有口袋妖怪相同

例如:

如果選擇"Bulbasaur"用戶,其中有各類草和毒的,那麼當他們去的CollectionView,它只會顯示Pokemon既可以是Grass也可以是Poison。

希望,這是有道理的,請讓我知道如果你需要任何看到我的代碼。

回答

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) 
+0

因此,在CollectionView中篩選了我的結果,但它沒有正確執行。它只是用類型爲Grass的口袋妖怪數量進行過濾,因此它只是在列表中顯示了前14個口袋妖怪,而不是Pokemon本身,這是Grass類型。那有意義嗎?我假設這是因爲我沒有使用indexPath? – Nick89

+0

是的,你應該顯示從filteredObjects不是對象本身或添加代碼顯示在collectionView –

+0

啊是的,沒有改變'cellForItemAtIndexPath'函數。現在工作。我唯一需要幫助的另一件事是在字典中檢查「typeTwo」。由於Grass確實出現在''typeTwo'''中,所以這些口袋妖怪當前沒有顯示,因爲我們只是用''type''進行過濾 - 是否有一種方法可以通過''type''和''typeType''進行過濾' ?謝謝 – Nick89

0

你不應該使用字典作爲模型的收集視圖。字典是無序集合,集合視圖顯示有序的對象列表。

您所示的數據結構是字典的陣列。由於數組有序集合,因此這是存儲集合視圖的數據的完全有效方式。

穆罕默德的代碼來過濾你的字典是對結果進行過濾的好方法,但你需要使用新的過濾陣列作爲模型(數據)爲您的集合視圖。