Aus Spaß Ich baue ein FreeCell Solitaire Spiel von Grund auf in Swift. Ich habe mein Modell für das Deck eingerichtet, um das Deck zu bauen, und jede Kartenstruktur hat eine Farbe, Rang und Beschreibung (z. B. 4 ♠ ️) plus einige andere Eigenschaften. Das Modell für das Spiel speichert einfach, welche Karten in welchen Spalten enthalten sind. Eine Änderung in der Ansicht (Verschieben einer Karte) wird den Controller warnen, um zu modifizieren, welche Karten sich in welchen Spalten befinden.Kommunikation "welche Spielkarte" zwischen View und Model - bester Weg?
Wenn ein Benutzer auf die Karte tippt (eine Unterklasse von UIView mit einem Etikett, das card.description enthält), wird der label.text an den Controller gesendet, um die Karte im Modell zu identifizieren. Ich frage mich, was der beste Weg ist, dies zu tun.
Der offensichtlichste Weg, den ich mir vorstellen kann, ist ein Wörterbuch zu erstellen, wo die Schlüssel Beschreibungen sind und die Werte Karten sind. Ich kann natürlich eine Funktion in meine DeckBuilder-Klasse schreiben, um das Wörterbuch für mich zu erstellen. Aber da die Beschreibung bereits als eine Eigenschaft der Kartenstruktur existiert, scheint dies ein wenig überflüssig und klobig zu sein. Eine andere Methode wäre, jedes Mal, wenn eine Karte ausgewählt wird, durch das Kartenspiel im Modell zu iterieren und "if selectedCard.description == tryCard.description {// das ist die richtige Karte!}" Zu sagen das erscheint absurd unelegant und theoretisch zu rechenintensiv (obwohl ich mir in Wirklichkeit sicher bin, dass es keine Zeit braucht).
Was ich gerne tun würde, ist der Controller sagen "Holen Sie sich die Karte, die diese Zeichenfolge als Beschreibungseigenschaft hat." Ähnlich dem Wörterbuch-Lookup, aber ohne ein Wörterbuch.
Ist diese letzte Lösung möglich? Wenn nicht, was hältst du für das Beste?
Danke!
Danke! Dies scheint ein viel besserer Weg zu sein, um zwischen dem Modell und der Sichtweise zu kommunizieren. –