Skip to content

Instantly share code, notes, and snippets.

@appfrosch
Last active November 11, 2023 08:34
Show Gist options
  • Save appfrosch/36abb4d5a50f2e5b748b8a18e3e367c4 to your computer and use it in GitHub Desktop.
Save appfrosch/36abb4d5a50f2e5b748b8a18e3e367c4 to your computer and use it in GitHub Desktop.
Simple square grid showing coloured circles depending on their type
//
// ContentView.swift
// poc-bolderGrid
//
// Created by Andreas Seeger on 10.11.2023.
//
import SwiftUI
struct ContentView: View {
@State private var holdsModel = GridModel.mock
var body: some View {
if holdsModel.validGrid {
Grid {
ForEach(0..<holdsModel.length, id: \.self) { row in
GridRow {
ForEach(0..<holdsModel.length, id: \.self) { column in
Button(
action: {
// TODO: implement action here
holdsModel.grid[row][column].holdType =
holdsModel.grid[row][column].holdType == .regular ? .special : .regular
}, label: {
Circle()
.foregroundStyle(holdsModel.grid[row][column].holdType.color)
})
}
}
}
}
.padding()
} else {
ContentUnavailableView("Invalid Grid", systemImage: "xmark")
}
}
}
#Preview {
ContentView()
}
enum HoldType {
case regular, special
var color: Color {
switch self {
case .regular:
.blue
case .special:
.red
}
}
}
struct Hold {
let rowPosition: Int
let columnPosition: Int
var holdType: HoldType
}
struct GridModel {
var grid: [[Hold]]
var length: Int {
grid.count
}
var validGrid: Bool {
let rows = grid.count
print("Rows:", rows)
let columnsSum = grid.reduce(0, { partialResult, columns in
let count = columns.count
print("Column count:", count)
return partialResult + count
})
print("Coulum sum:", columnsSum)
let columnSquareRoot = Double(sqrt(Double(columnsSum)))
print("Columns:", columnSquareRoot)
let isValid = Double(rows) == columnSquareRoot
print("Valid:", isValid)
return isValid
}
}
extension GridModel {
static let mock = GridModel(
grid: [
[
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular),
Hold(rowPosition: 0, columnPosition: 0, holdType: .special),
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular),
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular)
],
[
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular),
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular),
Hold(rowPosition: 0, columnPosition: 0, holdType: .special),
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular)
],
[
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular),
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular),
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular),
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular)
],
[
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular),
Hold(rowPosition: 0, columnPosition: 0, holdType: .special),
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular),
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular)
]
]
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment