2017-11-07 1 views
1

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!

+0

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

Antwort

0

Eines der Probleme mit berechneten Eigenschaften besteht darin, dass Sie sich nicht immer bewusst sind, dass sich diese ändern. So viele Programmierer zögern normalerweise, sie in großen Projekten zu verwenden, siehe this link für weitere Informationen.

+0

ausgelöst werden Danke für den Link, ich werde gelesen haben. – hzxu