2016-09-11 3 views
1

Ich möchte den Wert eines verschachtelten Wörterbuchs speichern, damit meine Sammlungsansicht es später verwenden kann, ohne dass Sie jedes Mal durchforsten müssen, um es jedes Mal zu finden. Ich glaube auch nicht, dass es funktionieren wird (ich könnte falsch liegen), wenn ich versuche, die Schleife in meine Zelle für die Indexpfadfunktion einzufügen. Die "let facilitiesArray: [Ability] = ....." ist innerhalb meiner KlasseSo speichern Sie einen verschachtelten Wörterbuchwert

Letztendlich möchte ich facilitiesArray = Fähigkeiten. "heroForDetails.hero.abilities" ist ein [String: [Ability]], also möchte ich die [Ability] zurückgeben, deren heroForDetails.hero.id == heroId, weil es in heroForDetails.hero.abilities mehrere Schlüssel: Wert-Paare gibt. Der aktuelle Fehler fehlt Rückgabe in Schließung erwartet [Fähigkeit] zurückzukehren.

let abilitiesArray: [Ability] = {() -> ([Ability]) in 
    let val = heroForDetails.hero.abilities 
    for (heroId, abilities) in val { 

     if heroForDetails.hero.id == heroId { 
      return abilities 
     } 
    } 
}() 

„Fähigkeiten“ ist ein Array, das ich wie so

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("AbilitiesCell", forIndexPath: indexPath) as? AbilitiesCell { 

     let ability: Ability 
     ability = abilitiesArray[indexPath.row] 
     cell.configureCell(ability) 
     return cell 

    }else { 
     return UICollectionViewCell() 
    } 
} 

verwenden möchten Ich hoffe, dass ich zu erklären dies einen guten Job gemacht. Ich habe gerade angefangen zu lernen, so zu programmieren. Jede Hilfe wäre großartig. Ich könnte das auch komplett falsch machen.

Antwort

1

In Ihrem ersten Codeschnipsel scheinen Sie einen Artikel im Wörterbuch val mit einem Schlüssel zu finden. Ich hoffe, dass du das machen willst. Dazu müssen Sie nicht das gesamte Wörterbuch durchlaufen. Es ist sehr langsam, dies zu tun. (O (n)) Sie können den Index verwenden, um mit einem Schlüssel (heroForDeails.hero.id Variable) auf das Wörterbuch zuzugreifen. Dies ist viel schneller (O (1)).

Sie können den ganzen Schnipsel in eine Zeile verkürzen:

let abilitiesArray = heroForDetails.hero.abilities[heroForDetails.hero.id]! 

Auch ich eine Frage nicht in Ihrem Beitrag sieht ...

+0

für nicht eine Frage Sehen Sie sie beantworten zu verwaltende nur fein. Das habe ich gebraucht und es funktioniert jetzt. Vielen Dank! (Die Frage war im Titel) – Apple

0

Sie können das Wörterbuch zugreifen, indem

let val = heroForDetails.hero.abilities let abilities = val[heroForDeails.hero.id]

Soweit es in Ihrem cellforindexatpath zugreifen, sollte es nur in Ordnung sein. Mach dir keine Sorgen wegen der Schließung.

Verwandte Themen