【发布时间】:2022-01-04 18:30:02
【问题描述】:
点击按钮时,游戏中添加了一个玩家,我想通过视图模型观察游戏中的变化。当我按下按钮时,计数器不会改变。
就好像我需要ContentViewModel 中的游戏同时成为@ObservedObject 和@Published。
有人能帮我理解为什么设置错误的基本原理以及如何解决它吗?
import SwiftUI
import Combine
class Game: ObservableObject {
@Published var players: [String] = []
func addPlayer(_ player: String) {
players.append(player)
}
}
class ContentViewModel: ObservableObject {
@Published var game: Game {
didSet {
subscription = game.objectWillChange.sink { [weak self] _ in
self?.objectWillChange.send()
}
}
}
var subscription: AnyCancellable?
init(game: Game) {
self.game = game
}
}
struct ContentView: View {
@ObservedObject var viewModel: ContentViewModel
var body: some View {
Text("Num players: \(viewModel.game.players.count)")
.padding()
Button("Add player") {
viewModel.game.addPlayer("player")
}
}
}
【问题讨论】: