Ich mache eine App, die Pokemon und ihre Typen zeigt. Auch ein Teil der App zeigt ihre Schwächen.Wie filtere ich ein Wörterbuch und Ausgabeergebnis in CollectionViewController in swift
ich eine globale Variable, die alle Pokemon auflistet, die wie folgt aussieht:
var objects = [
{
"id": "001",
"typeTwo": "Poison",
"name": "Bulbasaur",
"type": "Grass"
},
{
"id": "002",
"typeTwo": "Poison",
"name": "Ivysaur",
"type": "Grass"
},
{
"id": "025",
"typeTwo": "",
"name": "Pikachu",
"type": "Electric"
}]
etc ...
Wenn der Benutzer wählt ein Pokemon aus dem 1. VC, drücken sie dann ein Taste und es passiert das Objekt dieses Pokemon zu meinem CollectionViewController
- und speichert diese in var selectedPokemonObject = [String:String]()
ich habe meine CollectionViewController
einrichten, um dann meine Pokemon Objekte zu filtern und nur Pokemon angezeigt werden, die den Typ o entsprechen f Pokemon, das der Benutzer ausgewählt hat. Zum Beispiel:
Der Benutzer wählt: Pikachu (Typ "Electric"
)
Der Benutzer geht dann zu dem CollectionViewController
und alle Pokemon vom Typ "Electric"
gezeigt. Einige meiner Code für das heißt:
var filteredObjects = [[String:String]]()
override func viewDidLoad() {
super.viewDidLoad()
filteredObjects = objects.filter{
let valueType = $0["type"]
let valueTypeTwo = $0["typeTwo"]
if (valueType == selectedPokemonObject["type"] || valueType == selectedPokemonObject["typeTwo"]) && (valueTypeTwo == selectedPokemonObject["typeTwo"] || valueTypeTwo == selectedPokemonObject["type"])
{
return true
}
return false
}
}
ich dann die Zelleninformationen in der cellForItemAtIndexPath
wie folgt festgelegt:
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell
let object = filteredObjects[indexPath.row]
cell.pokemonName.text = object["name"]!
cell.pokemonImage.image = UIImage(named: "\(object["id"]!)"+"\(object["name"]!)"+"_small")
return cell
}
All dies funktioniert.
Was ich als ein
Statt der CollectionViewController
zeigt Pokemon des gleichen Typs passieren möchte der Benutzer ausgewählt, würde Ich mag es Pokemon zu zeigen, dass eine Art hat, die ich definieren. Zum Beispiel:
Der Benutzer wählt: Pikachu ("type": "Electric"
)
Der Benutzer geht dann zu den CollectionViewController
und alle Pokemon vom Typ "Ground"
gezeigt. Oder ein komplexerer Fall:
Der Benutzer wählt: Bulbasaur ("type": "Grass"
und "typeTwo": "Poison"
)
Der Benutzer geht dann zum CollectionViewController
und alle Pokemon vom Typ "Fire"
, "Ice"
, "Flying"
und "Psychic"
gezeigt sind.
Ich habe wirklich Schwierigkeiten, dies herauszufinden, so dass jede Hilfe geschätzt wird. Ich habe Switch-Anweisungen angeschaut, bin mir aber nicht sicher, ob dies der richtige Ansatz ist. Danke
Wenn der Pokemon einen einzigen Typ hat, ist das "typeTwo" -Feld null? –
@HaydenHolligan '" typeTwo "' ist dann nur ein leerer 'String' - Ich habe meine Frage oben geändert, um ein Pokemon zu zeigen, das nur einen Typ hat, so dass du es sehen kannst. Danke – Nick89