Отображение опубликованного целого числа в тексте SwiftUI - PullRequest
0 голосов
/ 09 апреля 2020

Я довольно новичок в SwiftUI и столкнулся со следующей проблемой:

У меня есть модель, которая содержит некоторые целочисленные значения, например так:

class Game: ObservableObject {

    @Published var ownScore:Int = 0
    @Published var opponentScore:Int = 0

    ... some methods
}

Мне также нужно представление для отображения эти оценки и обновляются при изменении любого из этих значений. Мне нужно что-то вроде этого, однако, это не работает, так как значения являются опубликованными целыми числами.

struct ScoreView: View {
    @EnvironmentObject var game: Game
    @State var displayOpponent: Bool

    var body: some View {
        VStack {
            if displayOpponent {
                Text("Opponent Score")
                Text("Score: \(game.$opponentScore)")
            } else {
                Text("Your Score")
                Text("Score: \(game.$ownScore)")
            }

        }
    }
}

Есть идеи, как правильно это реализовать?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Ваш Game объект должен быть создан как @ObservedObject, а не @EnvironmentObject, если вы не внедрили его в среду, не показанную в вашем коде, поэтому ...

class Game: ObservableObject {

    @Published var ownScore:Int = 0
    @Published var opponentScore:Int = 0
}

struct ContentView: View {
    @ObservedObject var game = Game()
    @State var displayOpponent: Bool = true

    var body: some View {
        VStack {
            if displayOpponent {
                Text("Opponent Score")
                Text("Score: \(game.opponentScore)")
            } else {
                Text("Your Score")
                Text("Score: \(game.ownScore)")
            }
        }
    }
}

...должно сработать. Также вы просто представляете значения опубликованных переменных, поэтому $ не требуется.

0 голосов
/ 09 апреля 2020

Используйте в тексте только свойства, при публикации они будут обновляться автоматически

struct ScoreView: View {
    @EnvironmentObject var game: Game
    @State var displayOpponent: Bool

    var body: some View {
        VStack {
            if displayOpponent {
                Text("Opponent Score")
                Text("Score: \(game.opponentScore)")   // no $ 
            } else {
                Text("Your Score")
                Text("Score: \(game.ownScore)")        // no $
            }

        }
    }
}
...