// // SubBoardView.swift // // // Created by Shadowfacts on 12/21/22. // import SwiftUI @available(iOS 16.0, *) struct SubBoardView: View { let board: TicTacToeBoard let cellTapped: ((_ column: Int, _ row: Int) -> Void)? @State private var cellSize: CGFloat = 0 init(board: TicTacToeBoard, cellTapped: ((Int, Int) -> Void)? = nil) { self.board = board self.cellTapped = cellTapped } var body: some View { BoardView(board: board, cellSize: $cellSize, spacing: 10) { column, row in applyTapHandler(column, row, MarkView(mark: board[column, row]) .contentShape(Rectangle())) } } @ViewBuilder private func applyTapHandler(_ column: Int, _ row: Int, _ view: some View) -> some View { if let cellTapped { view.onTapGesture { cellTapped(column, row) } } else { view } } } @available(iOS 16.0, *) struct SubBoardView_Previews: PreviewProvider { static var previews: some View { SubBoardView(board: TicTacToeBoard(marks: [ [ .x, .o, .x], [nil, .x, .o], [ .x, nil, nil], ])) } }