Я пытаюсь создать игру 2048 для изучения SwiftUI, но я застрял. У меня есть три класса, Game, Board и Tiles. В игре есть переменная, которая содержит экземпляр Board, а на доске есть переменная, содержащая матрицу Tiles.
Таким же образом у меня есть три представления: ContentView.swift, BoardView.swift и TilesView.swift
В представлении ContentView.swift я инициализирую игру следующим образом:
@ObservedObject var game = Game()
...
Blocks(board: self.game.board)
Затем в BoardView.swift:
@ObservedObject var board: Board
... Loop ...
TileView(value: self.board.board[y][x].value)
...
.gesture(
DragGesture()
.onChanged({ value in
let direction = self.board.gestureToDirection(startLocation: value.startLocation, location: value.location)
self.board.move(direction: direction)
})
)
А в TileView.swift:
@State var value: Int = 0;
Game.swift:
class Game: ObservableObject {
@Published var board = Board()
}
Board.swift :
class Board: ObservableObject {
@Published var board: [[Tile]] = []
/* Here is the logic of the game, when a gesture is triggered in ContentView.swift, I call a function to move the tiles */
}
Tiles.swift:
class Tile: ObservableObject {
@Published var coords: Coords
@Published var value: Int
}
Моя проблема в том, что когда я перетаскиваю экран, доска не меняется, и у меня возникает ощущение, что содержимое моя доска не одинакова в разных моих файлах ...
Как я могу делиться данными между представлениями и классами?
Спасибо.