Ich brauche eine Meinung auf Ansicht Modellarchitektur, in meinem Projekt brauche ich eine Ansicht Modell für einen Bildschirm, der einen Spielvorbereitung Status anzeigt, sagen, ich brauche mehr als 3 Spieler, um das Spiel zu starten und das View-Modell hat eine String-Eigenschaft für den Status, und ich habe in meiner Sicht Controller ein Array von Spielern aus der API abgerufen.Swift-View-Modell: Funktion vs Setter mit Nebeneffekt
Option 1:
// `gameStatusLabel` is a get property and only set internally when
// updating players via function
class GameStatusViewModel: NSObject {
private(set) var gameStatusLabel: String
func updatePlayers(players: [Player]?) {
if let players = players, players.count > 3 {
gameStatusLabel = "Ready to start"
} else {
gameStatusLabel = "Not enough player(s)"
}
}
Option 2:
// `gameStatusLabel` is a computed property based on `players.count`
class GameStatusViewModel {
weak var players: [Player]?
var gameStatusLabel: String {
if let players = self.players {
if players.count > 3 {
return "Ready to start"
}
}
return "Not enough player(s)"
}
}
Da ich zu Swift neu bin so möchte ich fragen, welche Option oben besser ist, und warum? (Oder alternativ, wenn es eine andere bessere Option)
Option 1 kein Spieler-Modell in dem View-Modell speichern, da es keinen Verweis auf players
zu halten braucht, und players
ist nur für die Aktualisierung der gameStatusLabel
benötigt , während Option 2 einen schwachen Bezug auf Spieler hält und gameStatusLabel
eine berechnete Eigenschaft macht, das Problem hier ist, dass players
in Option 2 brauchen nur einen Setzer, ich weiß nicht, ob ich nur einen Setter für eine Eigenschaft haben kann ohne einen Getter (dies scheint der Weg zu sein Option 1).
Vielen Dank im Voraus!
Meiner Meinung nach ist Option 2 der bessere Ansatz, aber Sie müssen wirklich einen verbindlichen Rahmen mit MVVM verwenden, um die Probleme zu vermeiden, die von @test – Paulw11