У меня проблема в режиме предварительного просмотра только из-за способа инициализации одной из моих переменных. Это представление принимает PlayerScore в качестве параметра, потому что мне нужно знать, какой счет редактировать. Он также имеет объект game , в котором хранятся все результаты.
Я просто делаю поиск по индексу PlayersCore в массиве игр PlayerScores для последующего изменения.
Проблема с предварительным просмотром заключается в том, что PlayerScore, который я использую в ScoreEntry_Previews, явно не соответствует UUID playerScore в игровом массиве. Таким образом, он не будет отображать предварительный просмотр, потому что инициализация var завершается неудачей, поскольку он не находит UUID.
Как с этим справиться?
struct ScoreEntry: View {
@EnvironmentObject var game : Game
@Binding var isPresented: Bool
var playerScore: PlayerScore
var scoreIndex: Int {
game.playerScores.firstIndex(where: { $0.id == playerScore.id})!
}
var body: some View {
HStack {
Text("\(self.game.playerScores[self.scoreIndex].totalScore())")
}
}
}
struct ScoreEntry_Previews: PreviewProvider {
static var previews: some View {
ScoreEntry(
isPresented: .constant(true)
,playerScore: PlayerScore(player: Player(name: "SomePlayer", shortName: "Steph", photoURL:"steph", color: .orange),pointsList: [1,2])
).environmentObject(Game())
}
}
struct PlayerScore: Identifiable, Hashable {
var id = UUID()
let player: Player
var pointsList: [Int]
func totalScore() -> Int {
return pointsList.reduce(0, +)
}
mutating func addPoints(scoreValue: Int) {
pointsList.append(scoreValue)
}
}
class Game: ObservableObject {
var players = [Player] ()
@Published var playerScores = [PlayerScore] ()
}